Par*_*rag 5 python python-3.x pandas
我有以下数据框
df1 = pd.DataFrame({'Name': ['A0', 'A1', 'A2', 'A3', 'A4'],
'Buy': [True, True, False, False, False],
'Sell': [False, False, True, False, True]
},
index=[0, 1, 2, 3, 4])
df1
Name Buy Sell
0 A0 True False
1 A1 True False
2 A2 False True
3 A3 False False
4 A4 False True
Run Code Online (Sandbox Code Playgroud)
我想合并 Buy 和 Sell 列的条件是,如果“Buy”具有 True 价值,则“Buyer”,如果“Sell”具有 True 价值,则“Seller”,如果“Buy”和“Sell”都具有 False 价值,那么它应该有“NA”
sample required output
Name Type
0 A0 Buyer
1 A1 Buyer
2 A2 Seller
3 A3 NA
4 A4 Seller
Run Code Online (Sandbox Code Playgroud)
np.selecta = np.select([df1.Buy, df1.Sell], ['Buyer', 'Seller'], 'NA')
pd.DataFrame({'Name': df1.Name, 'Type': a})
Name Type
0 A0 Buyer
1 A1 Buyer
2 A2 Seller
3 A3 NA
4 A4 Seller
Run Code Online (Sandbox Code Playgroud)
df1.assign(Type=np.select([df1.Buy, df1.Sell], ['Buyer', 'Seller'], 'NA'))
Name Buy Sell Type
0 A0 True False Buyer
1 A1 True False Buyer
2 A2 False True Seller
3 A3 False False NA
4 A4 False True Seller
Run Code Online (Sandbox Code Playgroud)
你可以做:
s = df[['Buy','Sell']]
df['Type'] = (s@s.columns).add('er').replace('er', np.nan)
# or
# df['Type'] = np.where(s.any(1), s.idxmax(1).add('er'), np.nan)
Run Code Online (Sandbox Code Playgroud)
输出:
Name Buy Sell Type
0 A0 True False Buyer
1 A1 True False Buyer
2 A2 False True Seller
3 A3 False False NaN
4 A4 False True Seller
Run Code Online (Sandbox Code Playgroud)