如何在熊猫数据框中的多列中使用多重算术函数

时间:2019-04-17 05:21:25

标签: pandas

我有一个熊猫数据框和以下三个列表。

list1 = ['n3', 'n5', 'n7']
list2 = ['n1', 'n2', 'n4', 'n11', 'n12']
list3 = ['n6', 'n8', 'n9', 'n10']

item  n1  n2  n3  n4  n5  n6  n7  n8  n9  n10  n11  n12
item1  1   6   7  8   9   1    6   8   8    9   9    5
item2  1   6   7  6   9   1    8   8   8    9   9    5

我想在三个列表中选择列名,并执行以下算术函数。

  • list1:添加
  • list2:使用绝对数字(即abs(n))和加法运算符
  • list3:取数字的倒数(即1/n)和加法

例如,如果我们采用item1

  • list1:add columns n3, n5, n7,即7+9+6 = 22
  • list2:take abosulte and add columns n1, n2, n4, n11, n12,即abs(1)+abs(6)+abs(8)+abs(9)+abs(5) = 29
  • list3:take inverse and add columns n6, n8, n9, n101/1 + 1/8 + 1/8 + 1/9 = 1.3611

现在,我想分别将总和加到数据框中。

item  n1  n2  n3  n4  n5  n6  n7  n8  n9  n10  n11  n12   list1_sum  list2_sum  list3_sum total_sum
item1  1   6   7  8   9   1    6   8   8    9   9    5      xxx  xxx  xxx  xxx
item2  1   6   7  6   9   1    8   8   8    9   9    5      xxx  xxx  xxx  xxx

我能够按照以下步骤进行list1

df['list1_sum'] = df[list1].sum(axis=1)

但是,我找不到如何执行剩余操作的方法。

很高兴在需要时提供更多详细信息。

2 个答案:

答案 0 :(得分:2)

使用DataFrame.absDataFrame.rdiv从右侧分开:

df['list1_sum'] = df[list1].sum(axis=1)
df['list2_sum'] = df[list2].abs().sum(axis=1)
df['list3_sum'] = df[list3].rdiv(1).sum(axis=1)
#same like 
#df['list3_sum'] = (1 / df[list3]).sum(axis=1)

df['total_sum'] = df[['list1_sum','list2_sum','list3_sum']].sum(axis=1)
print (df)
    item  n1  n2  n3  n4  n5  n6  n7  n8  n9  n10  n11  n12  list1_sum  \
0  item1   1   6   7   8   9   1   6   8   8    9    9    5         22   
1  item2   1   6   7   6   9   1   8   8   8    9    9    5         24   

   list2_sum  list3_sum  total_sum  
0         29   1.361111  52.361111  
1         27   1.361111  52.361111  

答案 1 :(得分:1)

您也可以尝试以下方法:

df[list2].apply(lambda x: 1/x.sum(), axis=1)

df[list2].apply(lambda x: 1.0/x.sum(), axis=1)

但是,jezrael的回答更快