首页 > 解决方案 > 从不同的数据帧中获取数据

问题描述

我是 python 的新手。我有两个数据框,一个是包含 ID 和名称的 df,其他数据框是具有 3 列 MergedID、MergedName、Filename 的源

在下面的代码中,我将源数据与 df 数据框进行比较。

理想情况下,代码就像源 MergedID 列中存在的 df 列中的 ID 一样工作,然后在 df 数据框中创建一个列作为匹配并在那里写入 True。但下一个要求是我需要知道匹配来自哪个文件。如何获取文件名

def abcd(a,b,c):
if a!=None and len(a)>0 and str(a)!='nan' and a in list(c["MergedID"].astype(str)):
    match={True}
else:
    match={False}
    
    return match
df["match"]=df.apply(lambda x: abcd(str(x["ID"]),x["Name"],source) , axis=1)
    

源数据框

资源

df数据框

df

输出应该是

在此处输入图像描述

标签: pythonpandaslistdataframe

解决方案


尝试类似:

import pandas as pd

src_df = pd.DataFrame({'Filename': [f'Filename {i}' for i in range(1, 7)],
                       'MergedID': [7001, 1003, 3265, 1001, 6532, 1004],
                       'Mergedname': ['qwz', 'qwr', 'jkh', 'xyz', 'otp', 'abc']})

df = pd.DataFrame({'ID': [1001, 1002, 1003, 1004, 1005, 1006],
                   'Names': ['xyz', 'pqr', 'qwr', 'abc', 'prt', 'lmn']})

# Merge Together
merged_df = df.merge(src_df, left_on='ID', right_on='MergedID', how='left')
# Add Match Column
merged_df['match'] = merged_df['MergedID'].notnull()
# Filter and Reorder Columns
merged_df = merged_df[['ID', 'Names', 'match', 'Filename']]

# For Display
print(merged_df.fillna('').to_string(index=False))

输出:

  ID 名称匹配文件名
1001 xyz 真实文件名 4
1002 pqr 错误           
1003 qwr 真实文件名 2
1004 abc 真实文件名 6
1005 错误           
1006 lm 错误                  

(单线)

merged_df = df.merge(src_df,
                     left_on='ID',
                     right_on='MergedID',
                     how='left') \
    .assign(match=lambda x: x['MergedID'].notnull())[['ID', 'Names',
                                                      'match', 'Filename']]

推荐阅读