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 中的多个列进行比较?

将多个键上的 pandas 数据帧映射为列或 multiIndex

Python根据pandas中的时间戳查找多个值