熊猫合并两列与自定义文本

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)

piR*_*red 9

np.select

a = 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)


Qua*_*ang 7

你可以做:

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)