gpt4 book ai didi

python - 基于分组创建pandas列

转载 作者:行者123 更新时间:2023-12-02 01:51:44 24 4
gpt4 key购买 nike

我有一个像这样的数据框:

Group Col A Col B
1 A1 B1
1 A2 B2
2 A3 B3
2 A4 B4

我想创建一个关于组的新列 Per A 和 Per B,所以结果应该是

Group Col A Col B     Per A           Per B
1 A1 B1 100*A1/(A1+A2) 100*B1/(B1+B2)
1 A2 B2 100*A2/(A1+A2) 100*B2/(B1+B2)
2 A3 B3 100*A3/(A3+A4) 100*B3/(B3+B4)
2 A4 B4 100*A4/(A3+A4) 100*B4/(B3+B4)

我需要一个一般情况,其中有几个组,每个组都有不同的组大小。

我尝试使用 for 循环,虽然我能够找到列,但无法将它们分配给数据框。我不明白到底是什么阻止了它。

例如,这是我正在寻找的结果(注意我如何更改反射(reflect)“不同组大小”的组列)

Group Col A Col B Per A Per B
1 1 2 100.0 100.0
2 1 2 16.67 25.00
2 2 2 33.33 25.00
2 3 4 50.00 50.00

最佳答案

  df = pd.DataFrame({
'Group': [1,1,2,2,3,3,3],
'ColA': [1,2,3,4,5,6,7],
'ColB': [10,22,30,40,50,60,70],
})

df = df.merge(df.groupby(['Group'])['ColA', 'ColB'].sum().reset_index(),
left_on='Group', right_on='Group')
df['PerA'] = df['ColA_x']*100/df['ColA_y']
df['PerB'] = df['ColB_x']*100/df['ColB_y']

df = df.rename(
columns={'ColA_x': 'ColA', 'ColB_x': 'ColB'}).drop(
columns=['ColA_y', 'ColB_y'])

print (df)

输出:

   Group  ColA  ColB       PerA       PerB
0 1 1 10 33.333333 31.250000
1 1 2 22 66.666667 68.750000
2 2 3 30 42.857143 42.857143
3 2 4 40 57.142857 57.142857
4 3 5 50 27.777778 27.777778
5 3 6 60 33.333333 33.333333
6 3 7 70 38.888889 38.888889

关于python - 基于分组创建pandas列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70191492/

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