gpt4 book ai didi

pandas - 计算 Pandas 中的行百分比

转载 作者:行者123 更新时间:2023-12-02 19:53:42 24 4
gpt4 key购买 nike

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

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']

我想知道在 pandas 中是否有比这更简单和替代的方法。

最佳答案

我们可以做到以下几点:

  1. 我们使用 iloc
  2. 对正确的列进行切片
  3. applyaxis=1 结合使用以明智地应用每个计算行
  4. 我们使用 divsummul 将每个值除以行总和并将其乘以 100 以获得整体百分比数字不是小数
  5. 我们使用 astype 将我们的 floats 转换回 int
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 数组

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

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

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

由 Jon Clements 提议

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

关于pandas - 计算 Pandas 中的行百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57543877/

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