熊猫:将新列插入数据框,然后根据if逻辑填充新列中的值
问题描述:
我有一个包含两个国家/地区描述的数据框。有时他们匹配,有时他们不匹配。熊猫:将新列插入数据框,然后根据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