我有两列Pandas DataFrame。在某些行中,列被交换。如果他们被重新交换,那么列" a"将是负面的。检查它然后交换两列值的最佳方法是什么。
def swap(a,b):
if a < 0:
return b,a
else:
return a,b
有没有办法使用apply函数来交换这两个值?
答案 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