2017-07-25 45 views
2

我有一個包含兩個國家/地區描述的數據框。有時他們匹配,有時他們不匹配。熊貓:將新列插入數據框,然後根據if邏輯填充新列中的值

Country Desc1  Country Desc2 

1 US   US 
2 US   UK   
3 UK   US  
4 UK   UK 

我需要1)與填充2)返回國家DESC1如果國家DESC2匹配規則中的所有行值插入另一列(國家Desc3)。

+0

可能重複te [如何比較兩列熊貓做第三列?](https://stackoverflow.com/questions/38925082/how-to-compare-two-columns-in-pandas-to-make-a-第三欄) – Zero

+0

如果你需要'NaN',我會推薦@piRSquared和@Rayhane媽媽的回答 – Wen

回答

2
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 
1

讓我們使用ilocjoin

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 
1

你可以做,使用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時,他們不匹配。

1

試試這個,如果你需要在新列

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'] 
相關問題