Python 按日期聚合的更优雅方式
我有以下数据帧Python 按日期聚合的更优雅方式,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有以下数据帧 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 并希望按日期聚合功率。有两个聚合函数:std和average。因此,我想获得以下输出
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
并希望按日期聚合功率。有两个聚合函数:std和average。因此,我想获得以下输出
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\u by
中使用as\u index=False
时,输出如下所示: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
试试这个:
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
我想你已经做了你想做的。当我运行
print(按日期分组\u power\u.reset\u index())
时,我会得到您想要的输出:
date avg_power std_power
0 2019-01-01 100.666667 1.154701
1 2019-01-02 99.666667 2.081666
我想你已经做了你想做的。当我运行
print(按日期分组\u power\u.reset\u index())
时,我会得到您想要的输出:
date avg_power std_power
0 2019-01-01 100.666667 1.154701
1 2019-01-02 99.666667 2.081666
预期输出是什么?预期输出是什么?是的,我共享的代码生成预期输出。但是,我不明白为什么按日期分组的功率=功率df.groupby('date').agg(**{'avg\u power':pd.namedagh('power',np.mean),'std\u power':pd.namedagh('power',np.std),})产生了一些不同的结果。不同之处在于索引。当您使用
.agg()
进行聚合时,返回的数据帧将根据您分组数据的方式(本例中的日期)进行索引,而第一个数据帧将以数字形式进行索引(0、1等)。是的,我共享的代码将生成预期的输出。但是,我不明白为什么按日期分组的功率=功率df.groupby('date').agg(**{'avg\u power':pd.namedagh('power',np.mean),'std\u power':pd.namedagh('power',np.std),})产生了一些不同的结果。不同之处在于索引。使用.agg()
进行聚合时,返回的数据帧将根据数据分组的方式(本例中的日期)进行索引,而第一个数据帧将以数字形式进行索引(0、1等)