You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于三个DataFrame检查缺失名称并补充对应数值的需求

解决DataFrame名称匹配与缺失数据追加问题

我来帮你一步步实现这个需求,用Python的pandas库就能轻松搞定。首先我们先把题目里的三个DataFrame创建出来,方便后续操作:

import pandas as pd

# 创建Data1
data1_data = {
    'Name_description': ['ABC', 'DEF', 'GHI', 'XYZ', 'JVK', 'LMN'],
    'Numbers': [23, 34, 45, 43, 23, 21]
}
Data1 = pd.DataFrame(data1_data)

# 创建Data2
data2_data = {'Names': ['ABC', 'DEF', 'GHI', 'XYZ', 'JVK', 'LMN', 'PQR', 'KJL']}
Data2 = pd.DataFrame(data2_data)

# 创建Data3
data3_data = {
    'Name_desc': ['ABC', 'DEF', 'GHI', 'XYZ', 'JVK', 'LMN', 'PQR', 'KJL'],
    'Numbers': [56, 67, 89, 60, 88, 65, 100, 85]
}
Data3 = pd.DataFrame(data3_data)

接下来按照需求分三步落地:

步骤1:检查Data2中的名称是否存在于Data1,找出缺失项

我们可以用pandas的isin()方法快速筛选出Data2里不在Data1中的名称,比集合操作更贴合DataFrame的使用习惯:

# 筛选Data2中不在Data1里的名称
missing_names_df = Data2[~Data2['Names'].isin(Data1['Name_description'])]
missing_names = missing_names_df['Names'].tolist()
print("Data2中缺失的名称:", missing_names)
# 输出:Data2中缺失的名称: ['PQR', 'KJL']

步骤2:从Data3中提取缺失名称对应的数值

注意Data3的名称列是Name_desc,和Data1的Name_description列名不一致,所以需要先重命名列,保证后续追加时格式统一:

# 筛选缺失名称对应的行,并重命名列以匹配Data1
missing_data = Data3[Data3['Name_desc'].isin(missing_names)].rename(columns={'Name_desc': 'Name_description'})

步骤3:将缺失数据追加到Data1中

用pandas的concat()方法合并两个DataFrame,记得设置ignore_index=True重置索引,避免出现重复索引的问题:

# 把缺失数据追加到Data1
Data1_updated = pd.concat([Data1, missing_data], ignore_index=True)
print("更新后的Data1:")
print(Data1_updated)

完整整合代码

如果想一次性运行所有逻辑,直接用下面的完整代码即可:

import pandas as pd

# 创建初始DataFrame
data1_data = {
    'Name_description': ['ABC', 'DEF', 'GHI', 'XYZ', 'JVK', 'LMN'],
    'Numbers': [23, 34, 45, 43, 23, 21]
}
Data1 = pd.DataFrame(data1_data)

data2_data = {'Names': ['ABC', 'DEF', 'GHI', 'XYZ', 'JVK', 'LMN', 'PQR', 'KJL']}
Data2 = pd.DataFrame(data2_data)

data3_data = {
    'Name_desc': ['ABC', 'DEF', 'GHI', 'XYZ', 'JVK', 'LMN', 'PQR', 'KJL'],
    'Numbers': [56, 67, 89, 60, 88, 65, 100, 85]
}
Data3 = pd.DataFrame(data3_data)

# 步骤1:找出缺失名称
missing_names = Data2[~Data2['Names'].isin(Data1['Name_description'])]['Names'].tolist()

# 步骤2:获取缺失数据并匹配列名
missing_data = Data3[Data3['Name_desc'].isin(missing_names)].rename(columns={'Name_desc': 'Name_description'})

# 步骤3:追加数据
Data1_updated = pd.concat([Data1, missing_data], ignore_index=True)

print("最终更新后的Data1:")
print(Data1_updated)

这个方案逻辑清晰,完全覆盖了你提出的三个需求,运行后就能得到包含Data2所有名称的完整Data1。

内容的提问来源于stack exchange,提问作者Earthshaker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:53:46