【问题标题】:How can I get day_name() after groupby dayofweek?如何在 groupby dayofweek 之后获得 day_name()?
【发布时间】:2021-10-28 08:17:42
【问题描述】:

我有一个 DatetimeIndex 索引系列 s1 之类的

s1

time
2021-08-24 09:24:16+09:00    11933142
2021-08-24 10:00:03+09:00    11785209
2021-08-24 11:00:03+09:00    14462866
2021-08-24 19:00:04+09:00    11419204
2021-08-24 20:00:03+09:00    11757634
Name: x, dtype: int64

一周中的每一天都需要mean()。然后我想获取索引的day_name() 来绘制图形标签,但我不能,因为DatetimeIndex 现在变成了int。

g1 = s1.groupby(s1.index.dayofweek).mean()
----> 3 g1.index.day_name()

AttributeError: 'Int64Index' object has no attribute 'day_name'


最聪明的解决方法是什么?

【问题讨论】:

  • 按日期分组?
  • 我忘了提一件事。我想保持dayofweek的排序顺序

标签: python pandas dayofweek


【解决方案1】:

day_name分组:

>>> s1.groupby(s1.index.day_name()).mean()

Tuesday    12271611.0
Name: time, dtype: float64

图表示例:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import calendar

days = list(calendar.day_name)

s2 = pd.Series(np.random.randint(1000, 10000, 365),
               index=pd.date_range('2021-01-01', '2021-12-31'))

s2.groupby(s2.index.day_name()).mean().reindex(days).plot(kind='bar', rot=45)

plt.show()

【讨论】:

  • 感谢示例代码!有什么办法可以避免自己写代码days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
  • 我更新了我的答案。使用标准库中的calendar 模块。
【解决方案2】:

试试这个:

>>> s1.groupby(s1.index.dayofweek).transform('mean').index.day_name().drop_duplicates()
Index(['Tuesday'], dtype='object')
>>> 

【讨论】:

  • 它可以工作,但有一个问题。如何从星期一开始对数据进行排序?
猜你喜欢
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
  • 2019-11-14
  • 1970-01-01
  • 2023-02-17
  • 2017-07-30
  • 2020-11-21
  • 2020-08-01
相关资源
最近更新 更多