大熊猫将行划分为总数

时间:2018-01-17 21:24:00

标签: 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)

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

2 个答案:

答案 0 :(得分:2)

您需要select_dtypes

df.loc[:,df.select_dtypes(exclude='object').columns]=df.select_dtypes(exclude='object').div(df.select_dtypes(exclude='object').sum(1),0)

df
Out[66]: 
  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

答案 1 :(得分:2)

首先选择匹配列:

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