我需要使用熊猫计算每个类别的相对百分比,我知道我需要使用熊猫使用groupby,但是我有点迷茫。
输入:
ID | stringValue | FloatValue
A | 'string' | 2
A | 'string2' | 8
B | 'string' | 5
预期输出:
ID | stringValue | FloatValue | Perc
A | 'string' | 2 | 20
A | 'string2' | 8 | 80
B | 'string' | 5 | 100
预期输出组通过其ID值并计算百分比。
此处,在A中,您有两个值2
和8
。因此百分比应为100 * 2 / (2+8)
和100 * 8 / (2+8)
。对于id B,只有一个值,因此Perc应该为100
答案 0 :(得分:1)
IIUC尝试:
df['Perc'] = df.groupby('ID')['FloatValue'].transform(lambda x: (x/x.sum()) * 100)
# Output
ID stringValue FloatValue Perc
0 A 'string' 2 20
1 A 'string2' 8 80
2 B 'string' 5 100
答案 1 :(得分:1)
考虑到您的数据是一个名为“ data”的熊猫数据框,下面的代码应该可以解决问题:
data["Perc"] = data.apply(lambda x: x["FloatValue"] * 100 / data.groupby(["ID"]).sum()["FloatValue"][x["ID"]], axis=1)
它将按ID对您的商品进行分组,并计算FloatValue的总和。然后,DataFrame的apply方法通过将FloatValue除以相应的组总和来创建一个新的Series。
答案 2 :(得分:0)
如果5-> 100%是一个拼写错误,而您实际上只是在说我如何使我的数字看起来像一个百分比,那么您可以轻松地做到这一点。
如果希望按字面量将其百分比表示,则必须除以10,然后乘以100即可打印出来。
如果您希望将其设置为百分比,请牢记这一点,然后相反,再乘以10。
您可以通过以下操作来做到这一点:
df["Perc"] = df["FloatValue"] * 10