使用其他列的条件来计算熊猫中的新列

时间:2020-09-04 12:15:33

标签: python pandas

我有一个看起来像这样的数据框

pd.DataFrame({'A': [5, 2, -3, -2, 1],
   ...:                    'B': [9, -1, 7, -4, 3],
   ...:                    'C': [-5, 2, -6, -8, 9]})
Out[21]: 
   A  B  C
0  5  9 -5
1  2 -1  2
2 -3  7 -6
3 -2 -4 -8
4  1  3  9

对于每个列值> 0,我想加1,对于每个列值<0,我想在加总所有列之前减去1。

结果数据框应如下图所示

   A  B  C   D   Logic
0  5  9 -5  10   (5+1)+(9+1)+(-5-1)
1  2 -1  2   4   (2+1)+(-1-1)+(2+1)
2 -3  7 -6  -3
3 -2 -4 -8 -17
4  1  3  9  16

最简单/最快捷的方法是什么?

2 个答案:

答案 0 :(得分:3)

您可以这样做:

df['D'] = df.add(np.where(df>0, 1, -1)).sum(axis=1)

print(df)

   A  B  C   D
0  5  9 -5  10
1  2 -1  2   4
2 -3  7 -6  -3
3 -2 -4 -8 -17
4  1  3  9  16

说明

创建1和-1的数组,可以使用add将其添加到数据框中:

>>> np.where(df>0, 1, -1)

array([[ 1,  1, -1],
       [ 1, -1,  1],
       [-1,  1, -1],
       [-1, -1, -1],
       [ 1,  1,  1]])

答案 1 :(得分:0)

Numpy有一种称为numpy.sign的方法,可以将正数转换为1,将负数转换为-1。

df['D'] = df.add(np.sign(df)).sum(axis=1)