gpt4 book ai didi

python - Pandas 中的条件求和

转载 作者:太空宇宙 更新时间:2023-11-04 03:23:11 27 4
gpt4 key购买 nike

我有一个名为 df 的 3 列数据框:

Currency Product  Balance         
USD A 10
GBP B 20
USD A 15
GBP A 5
USD B 30
USD A 20
USD B 5

并希望计算每个独特的产品和货币组合的权重。

下面的代码给出了每个组合的总数:

df.groupby(['Currency','Product'])['Balance'].sum().

我想添加第 4 列,我在其中获取余额,并通过在 groupby 表中查找该组合的聚合值来划分它:

Currency Product  Balance  Weight       
USD A 10 28.57%
GBP B 20 100.00%
USD A 15 42.86%
GBP A 5 100.00%
USD B 30 85.71%
USD A 20 57.14%
USD B 5 14.29%

伪代码为:

df['Weight'] = df['Balance'] / look up value in the groupby table above

权重中的分子是余额,分母是同一产品以该货币表示的总和,因此 3 种产品和 4 种货币将得到 12 个总计。

请帮忙。

最佳答案

您可以将余额除以 transform groupby 的(与原始数据框保持相同的维度):

df['Weight'] = df.Balance / df.groupby(['Currency', 'Product']).Balance.transform(sum)

>>> df
Currency Product Balance Weight
0 USD A 10 0.222222
1 GBP B 20 1.000000
2 USD A 15 0.333333
3 GBP A 5 1.000000
4 USD B 30 0.857143
5 USD A 20 0.444444
6 USD B 5 0.142857

为了更好地理解正在发生的事情:

df['Sum'] = df.groupby(['Currency', 'Product']).Balance.transform(sum)

>>> df
Currency Product Balance Weight Sum
0 USD A 10 0.222222 45
1 GBP B 20 1.000000 20
2 USD A 15 0.333333 45
3 GBP A 5 1.000000 5
4 USD B 30 0.857143 35
5 USD A 20 0.444444 45
6 USD B 5 0.142857 35

>>> df.groupby(['Currency', 'Product']).Balance.sum()
Currency Product
GBP A 5
B 20
USD A 45
B 35
Name: Balance, dtype: int64

关于python - Pandas 中的条件求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34002846/

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