我想比较两列或多列,并将较大和较小的值放在新列中。
首先我复制了两列,然后更改了符合条件的行的值。
但是存在一个问题,就是不满足条件的行值改为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*
您应该在两侧使用掩码并转换为数组以避免列对齐:
m = df['a'] < df['b']
df.loc[m, ['Big', 'Small']] = df.loc[m, ['b', 'a']].values
输出:
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