gpt4 book ai didi

python - 通过对 pandas 中的多列进行分组和聚合来创建新列

转载 作者:太空宇宙 更新时间:2023-11-03 14:54:40 24 4
gpt4 key购买 nike

我有一个大约 50 列的数据框,其中一些是 period_start_time、id、speed_throughput 等。数据框示例:

    id     period_start_time         speed_througput    ...
0 1 2017-06-14 20:00:00 6
1 1 2017-06-14 20:00:00 10
2 1 2017-06-14 21:00:00 2
3 1 2017-06-14 21:00:00 5
4 2 2017-06-14 20:00:00 8
5 2 2017-06-14 20:00:00 12
...

我尝试通过将两列(id 和 period_start_time)分组来创建两个新列,并找到 speed_trhoughput 的平均值和最小值。我尝试过的代码:

df['Throughput_avg']=df.sort_values(['period_start_time'],ascending=False).groupby(['period_start_time','id'])[['speed_trhoughput']].max()
df['Throughput_min'] = df.groupby(['period_start_time', 'id'])[['speed_trhoughput']].min()

如您所见,我尝试了两种方法,但没有任何效果。我在两次尝试中收到的错误消息:

 TypeError:incompatible index of inserted column with frame index

我想你知道我的输出需要是什么,所以没有必要发布它。

最佳答案

选项 1
groupbyjoin 中使用 agg 附加到主数据框

df.join(
df.groupby(['id', 'period_start_time']).speed_througput.agg(
['mean', 'min']
).rename(columns={'mean': 'avg'}).add_prefix('Throughput_'),
on=['id', 'period_start_time']
)

id period_start_time speed_througput Throughput_avg Throughput_min
0 1 2017-06-14 20:00:00 6 8.0 6
1 1 2017-06-14 20:00:00 10 8.0 6
2 1 2017-06-14 21:00:00 2 3.5 2
3 1 2017-06-14 21:00:00 5 3.5 2
4 2 2017-06-14 20:00:00 8 10.0 8
5 2 2017-06-14 20:00:00 12 10.0 8
<小时/>

选项 2
groupby 上下文中使用 transform 并使用 assign 添加新列

g = df.groupby(['id', 'period_start_time']).speed_througput.transform
df.assign(Throughput_avg=g('mean'), Throughput_min=g('min'))

id period_start_time speed_througput Throughput_avg Throughput_min
0 1 2017-06-14 20:00:00 6 8.0 6
1 1 2017-06-14 20:00:00 10 8.0 6
2 1 2017-06-14 21:00:00 2 3.5 2
3 1 2017-06-14 21:00:00 5 3.5 2
4 2 2017-06-14 20:00:00 8 10.0 8
5 2 2017-06-14 20:00:00 12 10.0 8

关于python - 通过对 pandas 中的多列进行分组和聚合来创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45678619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com