工作日的熊猫石斑鱼?

Posted

技术标签:

【中文标题】工作日的熊猫石斑鱼?【英文标题】:Pandas Grouper by weekday? 【发布时间】:2017-11-15 04:16:01 【问题描述】:

我有一个熊猫数据框,其中索引是日期,从 2007 年到 2017 年。

我想计算每年每个工作日的平均值。我可以按年份分组:

groups = df.groupby(TimeGrouper('A'))
years = DataFrame()
for name, group in groups:
   years[name.year] = group.values

这是我创建新数据框(年)的方式,在每一列中我获取时间序列的每一年。 如果我想查看每年的统计数据(例如平均值):

print(years.mean())

但现在我想将每一年的一周中的每一天分开,以便获得当时所有工作日的平均值。

我唯一知道的是:

year=df[(df.index.year==2007)]

day_week=df[(df.index.weekday==2)]

这样做的问题是我必须每周更改 7 次,然后重复此操作 11 年(我的时间序列从 2007 年开始,到 2017 年结束),所以我必须这样做 77 次!

有没有办法按年份和工作日对时间进行分组以加快速度?

【问题讨论】:

你觉得groups = df.groupby([df.index.year, df.index.weekday])) 吗? 它有效。我不知道我可以根据索引对多个时间组进行分组。谢谢。 很高兴能帮上忙。如果我的回答有帮助,请不要忘记accept。谢谢。 【参考方案1】:

看来你需要groupby by DatetimeIndex.yearDatetimeIndex.weekday

rng = pd.date_range('2017-04-03', periods=10, freq='10M')
df = pd.DataFrame('a': range(10), index=rng)  
print (df)
            a
2017-04-30  0
2018-02-28  1
2018-12-31  2
2019-10-31  3
2020-08-31  4
2021-06-30  5
2022-04-30  6
2023-02-28  7
2023-12-31  8
2024-10-31  9

df1 = df.groupby([df.index.year, df.index.weekday]).mean()
print (df1)
        a
2017 6  0
2018 0  2
     2  1
2019 3  3
2020 0  4
2021 2  5
2022 5  6
2023 1  7
     6  8
2024 3  9

df1 = df.groupby([df.index.year, df.index.weekday]).mean().reset_index()
df1 = df1.rename(columns='level_0':'years','level_1':'weekdays')
print (df1)
   years  weekdays  a
0   2017         6  0
1   2018         0  2
2   2018         2  1
3   2019         3  3
4   2020         0  4
5   2021         2  5
6   2022         5  6
7   2023         1  7
8   2023         6  8
9   2024         3  9

【讨论】:

正如我所说,这正是我想做的。清晰而有用的答案。 你会如何使用 Grouper 编写这个? @NielsBom - 我认为不可能,因为df.groupby([pd.Grouper(freq='A'), pd.Grouper(freq='W')]).mean() 似乎是解决方案,但是对于weeks 是每周返回的时间段而不是0-7 值,所以失败了。在this 中找不到替代品。

以上是关于工作日的熊猫石斑鱼?的主要内容,如果未能解决你的问题,请参考以下文章

动态添加和删除商店石斑鱼

如何使石斑鱼和轴的长度相同?

在分组列表中设置石斑鱼的样式 - Sencha Touch 2

格式化日期时间标签以包含熊猫图的工作日名称

熊猫周工作日开始和结束

是否可以将大熊猫的日期时间转换为工作日/周末和季节?