python-3.x - 比较三个数据框并根据条件在其中一个数据框中创建一个新列
问题描述
我正在将两个数据框与 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')
解决方案
首先使用pd.concat
concat 数据框asia_df
,europe_df
然后使用DataFrame.merge
将它们与 合并master_df
,最后使用以Series.fillna
填充NaN
值:Region
Others
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
推荐阅读
- azure - Azure Cosmos DB Search with Contains 和 lower/upper 函数
- azure - 如何使用 Azure Data Lake Storage Gen2 和 Azure Data factory V2 执行基于事件的数据摄取?
- pandas - 如何在python中绘制多个条形图
- python - Flask SQLAlchemy 查询:从自外键关系中过滤记录
- c++-cli - 在 c++/cli 中使图像透明
- selenium - Selenium 获取子元素为什么慢
- c# - 动态创建 Expression.Lambda 的泛型类型
- azure - Azure 函数无法获取 blob 容器
- python - TypeError:不能将序列乘以浮点类型的非整数
- python - 在 QGraphicsScene 中移动 QlineF