python - Pandas 将行除以总数

标签 python pandas row division

我有这个 df:

Name    num1  num2   num3  
A       1      2      3    
B       4      5      6    
C       7      8      9    

我的目标是将每一行除以总数。这是我想出的:

df.loc[:,"num1":"num3"] = df.loc[:,"num1":"num3"].div(df["total"], axis=0)

效果很好。但是,如果在 num3 之后添加了更多的“numx”列,我将不得不手动将代码更新为“num1”:“numx”。有没有办法解决这个问题?

最佳答案

首先选择匹配的列:

In [21]: cols = df.columns[df.columns.str.contains('^num\d+')]

然后将这些行中的元素除以它们的总和(为每一行计算):

In [22]: df[cols] = df[cols].div(df[cols].sum(axis=1), axis=0)

In [23]: df
Out[23]:
  Name      num1      num2   num3
0    A  0.166667  0.333333  0.500
1    B  0.266667  0.333333  0.400
2    C  0.291667  0.333333  0.375

关于python - Pandas 将行除以总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48310216/

相关文章:

python - 如何在 pandas 数据框中执行按行划分

python - 如何压缩两个索引相同的数据帧,它们对应于绘图的 x 和 y 值

python - 如何获得相对于其他变量的类别总和?

python - QGraphicsItem 线宽/转换从 PyQt4 更改为 PyQt5

python - 子类化和扩展 numpy.ndarray

performance - Pandas 系列与单个向量的相关性

c# - Datagridview新行消失

excel - 如果单元格包含文本,则条件格式化整行

python - __init__.py 在 Python 中用于目录

python - Facebook opengraph 使用 Python Django