计算熊猫的相对百分比

时间:2018-10-22 08:04:50

标签: python pandas pandas-groupby

我需要使用熊猫计算每个类别的相对百分比,我知道我需要使用熊猫使用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中,您有两个值28。因此百分比应为100 * 2 / (2+8)100 * 8 / (2+8)。对于id B,只有一个值,因此Perc应该为100

3 个答案:

答案 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
相关问题