计算大熊猫的行百分比

时间:2019-08-18 10:57:44

标签: pandas

我有一个如下所示的数据框

id  val1  val2  val3
a   100   60    40
b   20    18    12
c   160   140   100

我要为每一行计算百分比。

预期输出如下所示

id  val1  val2  val3
a   50    30    20
b   40    36    24
c   40    35    25

我尝试了以下代码

df['sum'] = df['val1]+df['val2]+df['val3]
df['val1] = df['val1]/df['sum']
df['val2] = df['val2]/df['sum']
df['val3] = df['val3]/df['sum']

我想知道在大熊猫中,有什么比这更简单和替代的方法了。

1 个答案:

答案 0 :(得分:3)

我们可以执行以下操作:

  1. 我们用iloc切出正确的列
  2. applyaxis=1配合使用,以明智地应用每个计算行
  3. 我们使用divsummul将每个值除以行总和,然后将其乘以100,以得到整数而不是小数的百分比
  4. 我们用floatsint转换回astype
df.iloc[:, 1:] = df.iloc[:, 1:].apply(lambda x: x.div(x.sum()).mul(100), axis=1).astype(int)

输出

  id  val1  val2  val3
0  a    50    30    20
1  b    40    36    24
2  c    40    35    25

或矢量化解决方案,访问我们数据框下方的numpy arrays

注意:这种方法在速度方面应该表现更好

df.iloc[:, 1:] = (df.iloc[:, 1:] / df.sum(axis=1)[:, None]).mul(100).astype(int)

或类似但使用熊猫DataFrame.div方法:

乔恩·克莱门茨的提议

df.iloc[:, 1:] = df.iloc[:, 1:].div(df.iloc[:, 1:].sum(1), axis=0).mul(100)