首页 > 解决方案 > 比较三个数据框并根据条件在其中一个数据框中创建一个新列

问题描述

我正在将两个数据框与 master_df 进行比较,并根据新条件(如果可用)创建一个新列。

例如,我有 master_df 和两个区域 df,分别为 asia_df 和 europe_df。我想检查 master_df 的公司是否在任何区域数据框中可用,并创建一个新列作为欧洲和亚洲的区域

master_df
company product
ABC    Apple
BCA    Mango
DCA    Apple
ERT    Mango
NFT    Oranges

europe_df
account sales 
ABC      12 
BCA      13
DCA      12

asia_df
account sales 
DCA      15
ERT      34

我的最终输出数据框预计为

company product region
ABC    Apple    Europe
BCA    Mango    Europe
DCA    Apple    Europe
DCA    Apple    Asia
ERT    Mango    Asia
NFT    Oranges  Others

当我尝试合并和比较时,一些数据被删除。我需要有关如何解决此问题的帮助

final_df = europe_df.merge(master_df, left_on='company', right_on='account', how='left').drop_duplicates()

final1_df = asia_df.merge(master_df, left_on='company', right_on='account', how='left').drop_duplicates()


final['region'] = np.where(final_df['account'] == final_df['company'] ,'Europe','Others')
final['region'] = np.where(final1_df['account'] == final1_df['company'] ,'Asia','Others')

标签: python-3.xpandasnumpydataframe

解决方案


首先使用pd.concatconcat 数据框asia_dfeurope_df然后使用DataFrame.merge将它们与 合并master_df,最后使用以Series.fillna填充NaN值:RegionOthers

r = pd.concat([europe_df.assign(Region='Europe'), asia_df.assign(Region='Asia')])\
      .rename(columns={'account': 'company'})[['company', 'Region']]

df = master_df.merge(r, on='company', how='left')
df['Region'] = df['Region'].fillna('Others')

结果:

print(df)
  company  product  Region
0     ABC    Apple  Europe
1     BCA    Mango  Europe
2     DCA    Apple  Europe
3     DCA    Apple    Asia
4     ERT    Mango    Asia
5     NFT  Oranges  Others

推荐阅读