我有一个看起来像这样的数据框
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
最简单/最快捷的方法是什么?
答案 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)