Pandas条件在两列中交换值

时间:2017-09-20 22:39:05

标签: python pandas

我有两列Pandas DataFrame。在某些行中,列被交换。如果他们被重新交换,那么列" a"将是负面的。检查它然后交换两列值的最佳方法是什么。

def swap(a,b):
    if a < 0:
        return b,a
    else:
        return a,b

有没有办法使用apply函数来交换这两个值?

2 个答案:

答案 0 :(得分:4)

试试这个?使用np.where

ary=np.where(df.a<0,[df.b,df.a],[df.a,df.b])
pd.DataFrame({'a':ary[0],'b':ary[1]})

Out[560]: 
   a  b
0  3 -1
1  3 -1
2  8 -1
3  2  9
4  0  7
5  0  4

数据输入:

df
Out[561]: 
   a  b
0 -1  3
1 -1  3
2 -1  8
3  2  9
4  0  7
5  0  4

使用apply

def swap(x):
    if x[0] < 0:
        return [x[1],x[0]]
    else:
        return [x[0],x[1]]


df.apply(swap,1)
Out[568]: 
   a  b
0  3 -1
1  3 -1
2  8 -1
3  2  9
4  0  7
5  0  4

答案 1 :(得分:1)

出于无聊:

df.values[:] = df.values[
    np.arange(len(df))[:, None],
    np.eye(2, dtype=int)[(df.a.values >= 0).astype(int)]
]

df

   a  b
0  3 -1
1  3 -1
2  8 -1
3  2  9
4  0  7
5  0  4