Pandas:将新列插入数据框,并根据if逻辑填充新列中的值

时间:2017-07-25 16:59:47

标签: python pandas

我有一个包含两个国家描述的数据框。有时他们匹配,有时他们不匹配。

Country Desc1        Country Desc2

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

我需要1.)插入另一列(国家描述3),其中所有行值都填充有2.)如果匹配国家描述2,则返回国家描述的规则。

4 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分: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']可以将两列的联接内容放在#39; t匹配。

答案 3 :(得分: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']