Python 基于列值对dataframe的子集执行计算
我有一个df,其中我有一个分类列,然后是各种数值列-我需要计算各种值,但在df的子集上,类别是相同的:Python 基于列值对dataframe的子集执行计算,python,pandas,Python,Pandas,我有一个df,其中我有一个分类列,然后是各种数值列-我需要计算各种值,但在df的子集上,类别是相同的: Type | num1 | num2 a | 10 | 10 a | 5 | 10 a | 1 | 30 b | 5 | 10 ... 在这里,我想计算每个值占该类型总数的百分比 因此,输出将是: Type | num1 | num2 | num2_pct a | 10 | 10 | 20 a | 5 | 10
Type | num1 | num2
a | 10 | 10
a | 5 | 10
a | 1 | 30
b | 5 | 10
...
在这里,我想计算每个值占该类型总数的百分比
因此,输出将是:
Type | num1 | num2 | num2_pct
a | 10 | 10 | 20
a | 5 | 10 | 20
a | 1 | 30 | 60
...
此计算将针对类型
列中的每个值进行
我曾尝试使用
df.loc
编写一个循环,创建一个新的df,然后合并它们-但这不是正确的方法 您可以单独运行,也可以使用管道获得结果:
#pipe
df["num1_pct"] = (df.groupby("Type")
.pipe(lambda x: x.num2.transform(lambda x: x).div(x.num2.transform("sum")).mul(100)))
Type num1 num2 num1_pct
0 a 10 10 20.0
1 a 5 10 20.0
2 a 1 30 60.0
3 b 5 10 100.0
#individually, and in my own opinion, cleaner :
grouping = df.groupby("Type")
df["num2_pct"] = df.num2 * 100 / grouping.num2.transform("sum")
num1_pct看起来更像是基于num2列的计算值。您能解释一下第二个版本吗?我很难理解它是如何工作的,因为分组的形状不同?转换确保为每一行复制聚合。单独尝试分组,您将看到它给出的[50,50,50,10]与行数匹配,相当于每个组的num2之和。