【问题标题】:Pandas merge multiple dataframes with lookup value stored on multiple columnsPandas 将多个数据帧与存储在多个列上的查找值合并
【发布时间】: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

我希望看到填充的所有文件,例如我希望的第一行:

【问题讨论】:

    标签: python pandas dataframe merge left-join


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2020-03-27
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      • 2021-01-10
      • 1970-01-01
      • 2020-03-09
      • 2016-01-19
      • 1970-01-01
      相关资源
      最近更新 更多