我有一个包含两个国家描述的数据框。有时他们匹配,有时他们不匹配。
Country Desc1 Country Desc2
1 US US
2 US UK
3 UK US
4 UK UK
我需要1.)插入另一列(国家描述3),其中所有行值都填充有2.)如果匹配国家描述2,则返回国家描述的规则。
答案 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)
让我们使用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
答案 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']