按日期聚合的更优雅方式



我有以下数据帧

time  power
0  2019-01-01 00:00    100
1  2019-01-01 01:00    102
2  2019-01-01 02:00    100
3  2019-01-02 00:00     99
4  2019-01-02 01:00     98
5  2019-01-02 01:00    102

并希望按日期汇总权力。有两个聚合函数:标准和平均值。所以,我想获得以下输出

date   avg_power  std_power
0  2019-01-01  100.666667   1.154701
1  2019-01-02   99.666667   2.081666

下面是生成此代码的代码:

import pandas as pd
import numpy as np
power_df = pd.DataFrame({
'time': ['2019-01-01 00:00', '2019-01-01 01:00', '2019-01-01 02:00', '2019-01-02 00:00', '2019-01-02 01:00', '2019-01-02 01:00'],
'power': [100, 102, 100, 99, 98, 102]
})
power_df['time'] = pd.to_datetime(power_df['time'])
power_df['date'] = power_df['time'].dt.date
grouped_power_by_date = power_df.groupby('date').agg(**{
'avg_power': pd.NamedAgg('power', np.mean),
'std_power': pd.NamedAgg('power', np.std),
})
print(grouped_power_by_date.reset_index())

所以,我有两个问题:

  1. 有没有办法在不添加额外的"日期"列的情况下按日期分组?
  2. 当我在group_by中使用as_index=False时,输出如下所示:
avg_power std_power
0 2019-01-01  100.666667
1 2019-01-02  99.666667

但是,我希望得到我上面描述的输出。这是一个错误还是我做错了什么?

我想你已经做了你想做的事。当我运行print(grouped_power_by_date.reset_index())时,我得到了您想要的输出:

date   avg_power  std_power
0  2019-01-01  100.666667   1.154701
1  2019-01-02   99.666667   2.081666

试试这个:

power_df.groupby(pd.to_datetime(power_df.time).dt.date).agg(**{
'avg_power': pd.NamedAgg('power', np.mean),
'std_power': pd.NamedAgg('power', np.std),
})

o/p

avg_power  std_power
time                             
2019-01-01  100.666667   1.154701
2019-01-02   99.666667   2.081666

相关内容

最新更新