基于三个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
相关产品推荐
相关产品推荐

