【问题标题】:How to segregate days of weeks into 1 week each and perform functions on them如何将每周的几天分成 1 周并对其执行功能
【发布时间】:2020-11-14 02:40:58
【问题描述】:

所以我有这样的股市数据

    Date           Open        High        Low        Close     Weekday

0   2007-09-17  4518.450195 4549.049805 4482.850098 4494.649902 Monday
1   2007-09-18  4494.100098 4551.799805 4481.549805 4546.200195 Tuesday
2   2007-09-19  4550.25     4739.0      4550.25     4732.350098 Wednesday
3   2007-09-20  4734.850098 4760.850098 4721.149902 4747.549805 Thursday
4   2007-09-21  4752.950195 4855.700195 4733.700195 4837.549805 Friday

5   2007-09-24  4837.149902 4941.149902 4837.149902 4932.200195 Monday
6   2007-09-25  4939.100098 4953.899902 4878.149902 4938.850098 Tuesday
7   2007-09-26  4937.600098 4980.850098 4930.350098 4940.5      Wednesday
8   2007-09-27  4942.700195 5016.399902 4942.700195 5000.549805 Thursday
9   2007-09-28  4996.450195 5055.799805 4996.450195 5021.350098 Friday

10  2007-10-01  5021.5      5089.299805 5001.350098 5068.950195 Monday
11  2007-10-03  5069.0      5261.350098 5034.149902 5210.799805 Wednesday
12  2007-10-04  5211.649902 5233.100098 5126.049805 5208.649902 Thursday
13  2007-10-05  5208.149902 5248.549805 5164.5      5185.850098 Friday

(为了更好的视觉表现,我已经在星期五之后放置了空白)

我已将日期字符串转换为 Weekday 列中的星期几。我想要做的是对于我想要找到的每一周,哪一天的开盘价最低,并增加该天的变量。所以在示例数据中应该是

第 1 周(索引 0-4)- 周二最低 Open 价格

第 2 周(索引 5-9)- 周一最低 Open 价格

第 3 周(指数 10-13)- 周一最低 Open 价格

所以它应该打印Monday -2, Tuesday -1, Wednesday - 0, Thursday -0, Friday -0

我该怎么做?

【问题讨论】:

  • df.rolling('1W') 会给你 1 周的窗口,它有 .min() 来获得最小值。从那里开始,就可以按照您想要的方式进行格式化
  • @noah 我试过这个,我得到了窗口必须是整数的错误。
  • 你滚动on=Date了吗?否则它将尝试将日期时间应用于索引

标签: python pandas dataframe


【解决方案1】:

似乎你想每隔 5 个 obs 发送一次 groupby -

df.groupby(df.index // 5)['Open'].min()

0    4494.100098
1    4837.149902
2    5021.500000
Name: Open, dtype: float64

以每周最低开盘价获取星期几 -

df.loc[df.groupby(df.index // 5)['Open'].idxmin(),'Weekday']

1     Tuesday
5      Monday
10     Monday
Name: Weekday, dtype: object

获取月数-

df.loc[df.groupby(df.index // 5)['Open'].idxmin(),'Weekday'].value_counts()

Monday     2
Tuesday    1
Name: Weekday, dtype: int64

更新

为了处理缺失的天数,利用Date 列进行分组 -

df.loc[df.groupby(df['Date'].dt.week)['Open'].idxmin(),'Weekday'].value_counts()

Monday     2
Tuesday    1
Name: Weekday, dtype: int64

【讨论】:

  • 谢谢你,但唯一的问题是它不是每次的第 5 次观察,某些工作日股市关闭,所以这一天丢失了,所以这会打乱这个计算。如何为您的解决方案统一数据集?
【解决方案2】:

您可以使用以下代码计算日期的周数,然后通过 groupby 计算最低开盘价

df['week'] = df['date'].dt.week
df.groupby('week')['Open'].min()

在此之后,您可以获取相应的日期,然后获取相应的天数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-26
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 2019-10-07
    • 2019-12-12
    相关资源
    最近更新 更多