我在按时间范围对熊猫df分组以及按列进行不同的计算时遇到麻烦:
让我们看一下df:
date identifier value_1 value_2
0 05.07.2018 16:35 A 10 0
1 05.07.2018 16:36 B 20 1
2 05.07.2018 16:37 A 20 2
3 05.07.2018 16:39 B 30 1
4 05.07.2018 16:40 A 40 3
5 05.07.2018 16:41 B 20 2
6 05.07.2018 16:41 A 30 1
7 05.07.2018 16:42 B 50 2
8 05.07.2018 16:43 B 20 3
9 05.07.2018 16:44 A 20 1
因此,我需要一个df,该df以5分钟为间隔的时间和标识符分组,其平均值为value_1和value_2之和:
date identifier value_1 value_2
0 05.07.2018 16:35 A 15 2
1 05.07.2018 16:35 B 25 2
2 05.07.2018 16:40 A 30 5
3 05.07.2018 16:40 B 30 7
如何在熊猫中以最有效的方式做到这一点?
维也纳的THX和BR
答案 0 :(得分:3)
在使用适当的格式将date
列设置为datetime
后,可以使用groupby
,pd.Grouper
和agg
# Set date to datetime format. I'm assuming it's day.month.year in your original dataframe
df['date'] = pd.to_datetime(df.date, format = '%d.%m.%Y %H:%M')
new_df = (df.groupby(['identifier', pd.Grouper(key='date', freq='5min')])
.agg({'value_1':'mean', 'value_2':'sum'}))
>>> new_df
value_1 value_2
identifier date
A 2018-07-05 16:35:00 15 2
2018-07-05 16:40:00 30 5
B 2018-07-05 16:35:00 25 2
2018-07-05 16:40:00 30 7
如果您想要与帖子中所需输出相同的格式,则可以使用此格式进行排序:
new_df.reset_index().sort_values(['date','identifier'])
identifier date value_1 value_2
0 A 2018-07-05 16:35:00 15 2
2 B 2018-07-05 16:35:00 25 2
1 A 2018-07-05 16:40:00 30 5
3 B 2018-07-05 16:40:00 30 7