Pandas 将多个数据帧与存储在多个列上的查找值合并
Posted
技术标签:
【中文标题】Pandas 将多个数据帧与存储在多个列上的查找值合并【英文标题】:Pandas merge multiple dataframes with lookup value stored on multiple columns 【发布时间】:2021-02-21 05:30:25 【问题描述】:我想合并 2 个数据帧,其中查找值存储在多个列上。
import pandas as pd
import numpy as np
d1 = 'CODE': ['BBLGLC70M',np.nan, np.nan, np.nan, np.nan],
'CODE1': [np.nan, np.nan, np.nan, 'AALGLC71P', np.nan],
'CODE2': ['BBLG', np.nan, 'ZZTNRD77', 'PRI', np.nan],
'DESC': ['OK', 'FALSE', 'YES', 'OK', 'NO']
df1 = pd.DataFrame(df1)
df1
df = 'NUMBER': ['BBLGLC70M', 'AALGLC71P', 'ZZTNRD77']
df = pd.DataFrame(df1)
df
我编写的代码在所有字段中输出 NaN:
merged = pd.merge(df, df1, how='left', left_on=['NUMBER', 'NUMBER', 'NUMBER'], right_on=['CODE', 'CODE1', 'CODE2'])
merged
我希望看到填充的所有文件,例如我希望的第一行:
【问题讨论】:
【参考方案1】:您需要将所有列一一合并并连接所有这些数据框:
res_df = pd.DataFrame()
for col in df1.columns:
temp_df = df.merge(df1, left_on=['NUMBER'], right_on=[col], how='inner')
res_df = pd.concat([res_df, temp_df], axis=0)
print(res_df)
输出:
NUMBER CODE CODE1 CODE2 DESC
0 BBLGLC70M BBLGLC70M NaN BBLG OK
0 AALGLC71P NaN AALGLC71P PRI OK
0 ZZTNRD77 NaN NaN ZZTNRD77 YES
【讨论】:
以上是关于Pandas 将多个数据帧与存储在多个列上的查找值合并的主要内容,如果未能解决你的问题,请参考以下文章
在 Pandas Dataframe 中查找多个字典键并返回多个匹配值
Pandas UDF Facebook Prophet / 多个参数
如何在单个列上使用 groupby 并对 Pandas 中的多个列进行比较?