我想要比较两列或多列,并将较大和较小的值放在新列中。
首先,我复制了两列,然后更改了满足条件的行的值。
但是这样存在一个问题,不满足条件的行值会被改为nan。
- 如何不改为 nan
- 如何一次性完成所有操作(如果可能的话)
样本:
import pandas as pd
a = [
{'a': 5, 'b': 10, 'c': 5},
{'a': 4, 'b': 0.5, 'c': 1},
{'a': 3.5, 'b': 15, 'c': 9},
{'a': 2.1, 'b': 5, 'c': 8},
{'a': 0.1, 'b': 1, 'c': 5},
]
df = pd.DataFrame(a)
df.loc[:, ['Big', 'Small']] = df[['a', 'b']].values
print(df.head())
df.loc[df['a'] < df['b'], ['Big', 'Small']] = df[['b', 'a']]
print(df.head())
>>
a b c Big Small
0 5.0 10.0 5 5.0 10.0
1 4.0 0.5 1 4.0 0.5
2 3.5 15.0 9 3.5 15.0
3 2.1 5.0 8 2.1 5.0
4 0.1 1.0 5 0.1 1.0
a b c Big Small
0 5.0 10.0 5 NaN NaN
1 4.0 0.5 1 4.0 0.5
2 3.5 15.0 9 NaN NaN
3 2.1 5.0 8 NaN NaN
4 0.1 1.0 5 NaN NaN
我想:
>>
a b c Big Small
*0 5.0 10.0 5 10.0 5.0*
1 4.0 0.5 1 4.0 0.5
*2 3.5 15.0 9 15.0 3.5*
*3 2.1 5.0 8 5.0 2.1*
*4 0.1 1.0 5 1.0 0.1*
您应该在两侧使用掩码并转换为数组以避免列对齐:
或者更好的是,
mask
直接使用来创建列:最后,如果您只想对两列进行排序:
输出:
你可以使用 numpy 来比较
输出