我有一个带有DatetimeIndex的DataFrame,我想创建一个新列,该列是另一列的聚集,由Datetime聚集,频率较慢。例如,小时值和一天中的每日平均值属于以下部分:
[index] A A_daily_mean
2018-08-01 00:00:00 6 7.5
2018-08-02 01:00:00 7 7.5
2018-08-03 02:00:00 8 7.5
2018-08-04 03:00:00 9 7.5
为此有一个班轮吗?
这对于其他groupby聚合(非日期时间)非常容易:
df['groupby_mean'] = df.groupby([col1, col2]).mean()
但是在DatetimeIndex的日期上分组失败很不幸:
df['mean_of_resampled'] = df.groupby(df.index.date).mean()
或者
df['mean_of_resampled'] = df.resample('1d').mean()
两者都给出:
[index] A A_daily_mean
2018-08-01 00:00:00 6 7.5
2018-08-01 01:00:00 7 NaN
2018-08-01 02:00:00 8 NaN
2018-08-01 03:00:00 9 NaN
我知道我可以通过合并或联接来添加值,但是我想知道是否缺少一些更好,更快乐的方法。
答案 0 :(得分:0)
我认为您正在寻找transform()
,例如:
In []:
df['A_daily_mean'] = df.groupby(df.index.date).transform('mean')
df
Out[]:
A A_daily_mean
2018-08-01 00:00:00 6 7.5
2018-08-01 01:00:00 7 7.5
2018-08-01 02:00:00 8 7.5
2018-08-01 03:00:00 9 7.5