熊猫:将新列插入数据框,然后根据if逻辑填充新列中的值

问题描述:

我有一个包含两个国家/地区描述的数据框。有时他们匹配,有时他们不匹配。熊猫:将新列插入数据框,然后根据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://*.com/questions/38925082/how-to-compare-two-columns-in-pandas-to-make-a-第三栏) – Zero

+0

如果你需要'NaN',我会推荐@piRSquared和@Rayhane妈妈的回答 – Wen

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 

让我们使用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 

你可以做,使用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']