我有以下数据帧
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())
所以,我有两个问题:
- 有没有办法在不添加额外的"日期"列的情况下按日期分组?
- 当我在
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