gpt4 book ai didi

python Pandas : groupby on two columns and create new variables

转载 作者:行者123 更新时间:2023-11-28 18:08:46 24 4
gpt4 key购买 nike

我有以下数据框描述了某类投资者在公司中持有的股份百分比:

    company  investor   pct 
1 A 1
1 A 2
1 B 4
2 A 2
2 A 4
2 A 6
2 C 10
2 C 8

我想为每种投资者类型创建一个新列,计算每家公司所持股份的平均值。我还需要保持数据集的相同长度,例如使用转换。

这是我想要的结果:

     company  investor   pct   pct_mean_A   pct_mean_B   pct_mean_C
1 A 1 1.5 4 0
1 A 2 1.5 4 0
1 B 4 1.5 4 0
2 A 2 4.0 0 9
2 A 4 4.0 0 9
2 A 6 4.0 0 9
2 C 10 4.0 0 9
2 C 8 4.0 0 9

非常感谢您的帮助!

最佳答案

使用groupby使用聚合 mean 并按 unstack reshape 对于助手 DataFrame 这是 join到原始的df:

s = (df.groupby(['company','investor'])['pct']
.mean()
.unstack(fill_value=0)
.add_prefix('pct_mean_'))

df = df.join(s, 'company')
print (df)
company investor pct pct_mean_A pct_mean_B pct_mean_C
0 1 A 1 1.5 4.0 0.0
1 1 A 2 1.5 4.0 0.0
2 1 B 4 1.5 4.0 0.0
3 2 A 2 4.0 0.0 9.0
4 2 A 4 4.0 0.0 9.0
5 2 A 6 4.0 0.0 9.0
6 2 C 10 4.0 0.0 9.0
7 2 C 8 4.0 0.0 9.0

或者使用pivot_table使用默认聚合函数 mean:

s = df.pivot_table(index='company',
columns='investor',
values='pct',
fill_value=0).add_prefix('pct_mean_')
df = df.join(s, 'company')
print (df)
company investor pct pct_mean_A pct_mean_B pct_mean_C
0 1 A 1 1.5 4 0
1 1 A 2 1.5 4 0
2 1 B 4 1.5 4 0
3 2 A 2 4.0 0 9
4 2 A 4 4.0 0 9
5 2 A 6 4.0 0 9
6 2 C 10 4.0 0 9
7 2 C 8 4.0 0 9

关于 python Pandas : groupby on two columns and create new variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51984598/

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