python - 从不同的数据帧中获取数据
问题描述
我是 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数据框
输出应该是
解决方案
尝试类似:
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']]
推荐阅读
- c# - 如何使用 NSwag 和 C# 指定“方案”元素?
- python - 使用 os.expanduser (python) 后查找文件目录
- android - ScrollView 后的 FrameLayout 始终位于底部
- maven - lein 尝试下载工件,即使它存在于本地
- css - Opencart 3.0.2.0 自定义布局
- c# - AutoMapper - 从带有子集合的 ViewModel 映射到带有子集合的现有模型
- proxy - gcloud - 错误:gcloud 崩溃(GeneralProxyError):(0,'连接意外关闭')
- c - using pointers to emulate pass by reference with simple function but getting no output
- google-apps-script - 在使用 Google Apps 脚本库时访问本地变量
- javascript - 无法制作粘性导航栏