我在按时间范围和按列的不同计算对熊猫 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
Run Code Online (Sandbox Code Playgroud)
因此,我需要一个 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
Run Code Online (Sandbox Code Playgroud)
我怎样才能在大熊猫中以最有效的方式做到这一点?
来自维也纳的 THX & BR
您可以在将列设置为正确格式后使用groupby, pd.Grouper, 和:aggdatedatetime
# 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
Run Code Online (Sandbox Code Playgroud)
如果您想要与帖子中所需的输出格式相同,您可以使用它来排序:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4662 次 |
| 最近记录: |