我有一個包含兩個國家/地區描述的數據框。有時他們匹配,有時他們不匹配。熊貓:將新列插入數據框,然後根據if邏輯填充新列中的值
Country Desc1 Country Desc2
1 US US
2 US UK
3 UK US
4 UK UK
我需要1)與填充2)返回國家DESC1如果國家DESC2匹配規則中的所有行值插入另一列(國家Desc3)。
我有一個包含兩個國家/地區描述的數據框。有時他們匹配,有時他們不匹配。熊貓:將新列插入數據框,然後根據if邏輯填充新列中的值
Country Desc1 Country Desc2
1 US US
2 US UK
3 UK US
4 UK UK
我需要1)與填充2)返回國家DESC1如果國家DESC2匹配規則中的所有行值插入另一列(國家Desc3)。
df['Country Desc3'] = \
df['Country Desc1'].mask(df['Country Desc1'] != df['Country Desc2'])
df
Country Desc1 Country Desc2 Country Desc3
0 US US US
1 US UK NaN
2 UK US NaN
3 UK UK UK
讓我們使用iloc
和join
:
df['Country Desc3'] = df.apply(lambda x: x.iloc[0] if x.iloc[0] == x.iloc[1] else ', '.join(x),axis=1)
輸出:
Country Desc1 Country Desc2 Country Desc3
1 US US US
2 US UK US, UK
3 UK US UK, US
4 UK UK UK
你可以做,使用numpy.where如下:
df['Country Desc3'] = np.where(df['Country Desc1']==df['Country Desc2'],df['Country Desc1'],np.nan)
這會給你:
Country Desc1 Country Desc2 Country Desc3
1 US US US
2 US US US
3 UK US NaN
4 UK UK UK
,如果你不喜歡有NaN
值只是改變np.nan
通過任何你喜歡的,例如:df['Country Desc1']+', '+df['Country Desc2']
有兩列的CONCAT時,他們不匹配。
試試這個,如果你需要在新列
df['Country Desc3']=df.apply(lambda x: ','.join(x.unique().tolist()), axis=1)
字符串如果您需要在新列一個清單
df['Country Desc3']=df.apply(lambda x: x.unique().tolist(), axis=1)
以防萬一你需要NaN
因爲沒有匹配的行
df['Country Desc3']=np.nan
df.loc[df['Country Desc1']==df['Country Desc2'],'Country Desc3']=df['Country Desc1']
可能重複te [如何比較兩列熊貓做第三列?](https://stackoverflow.com/questions/38925082/how-to-compare-two-columns-in-pandas-to-make-a-第三欄) – Zero
如果你需要'NaN',我會推薦@piRSquared和@Rayhane媽媽的回答 – Wen