gpt4 book ai didi

python - Pandas:根据值对列进行分组并创建新的列标题

转载 作者:行者123 更新时间:2023-11-28 21:41:22 24 4
gpt4 key购买 nike

我正在尝试重新安排 Pandas 数据框。

目前我有:

id  mins  param
1 10 0.15
1 11 0.16
1 12 0.17
2 10 0.20
2 11 0.21
2 12 0.22

但我想重新排列并按 id 分组:

id param_10 param_11 param_12 
1 0.15 0.16 0.17
2 0.20 0.21 0.22

在 pandas 中有没有一种有效的方法来做到这一点?还是我应该手动慢慢研磨所有东西?

谢谢

最佳答案

使用pivotunstackset_index最后add_prefix :

df = df.pivot(index='id', columns='mins', values='param').add_prefix('param_')
print (df)
mins param_10 param_11 param_12
id
1 0.15 0.16 0.17
2 0.20 0.21 0.22

df = df.set_index(['id','mins'])['param'].unstack().add_prefix('param_')
print (df)
mins param_10 param_11 param_12
id
1 0.15 0.16 0.17
2 0.20 0.21 0.22

如果错误:

ValueError: Index contains duplicate entries, cannot reshape

表示重复,需要聚合。使用 pivot_tablegroupby具有类似mean (sum, median, ...) 和 last unstack 的功能:

print (df)
id mins param
0 1 10 0.15 <- id mins dupe
1 1 10 0.50 <- id mins dupe
2 1 11 0.16
3 1 12 0.17
4 2 10 0.20
5 2 11 0.21
6 2 12 0.22

df = df.pivot_table(index='id', columns='mins', values='param', aggfunc='mean')
.add_prefix('param_')
print (df)
mins param_10 param_11 param_12
id
1 0.325 0.16 0.17 <- (0.15+0.5)/2 = 0.325
2 0.200 0.21 0.22

df = df.groupby(['id','mins'])['param'].mean().unstack().add_prefix('param_')
print (df)
mins param_10 param_11 param_12
id
1 0.325 0.16 0.17 <- (0.15+0.5)/2 = 0.325
2 0.200 0.21 0.22

为了清理,将 columns name 设置为 None by rename_axis并使用 reset_index对于 id 列:

df = df.rename_axis(None, axis=1).reset_index()
print (df)
id param_10 param_11 param_12
0 1 0.325 0.16 0.17
1 2 0.200 0.21 0.22

编辑:

多列解决方案:

df['param1'] = df['param'] / 4
print (df)
id mins param param1
0 1 10 0.15 0.0375
1 1 10 0.50 0.1250
2 1 11 0.16 0.0400
3 1 12 0.17 0.0425
4 2 10 0.20 0.0500
5 2 11 0.21 0.0525
6 2 12 0.22 0.0550

df = df.pivot_table(index='id', columns='mins', values=['param', 'param1'], aggfunc='mean')
df.columns = ['_'.join((x[0], str(x[1]))) for x in df.columns]
print (df)
param_10 param_11 param_12 param1_10 param1_11 param1_12
id
1 0.325 0.16 0.17 0.08125 0.0400 0.0425
2 0.200 0.21 0.22 0.05000 0.0525 0.0550

关于python - Pandas:根据值对列进行分组并创建新的列标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44847747/

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