如何在Pandas DataFrame中匹配列自动填充新增数据的score列
批量填充Pandas中新增观测的缺失Score值
核心思路是先从已有数据中构建color+food与score的对应关系映射,再用这个映射批量为新增数据填充缺失的score列,适合处理大量新增数据的场景。
步骤1:构建Score映射表
从已有DataFrame中提取color-food-score的对应关系,确保每个组合对应唯一的score值(如果已有数据中存在重复组合,可先做聚合处理,比如取均值、最大值)。
import pandas as pd # 假设已有数据为 df_existing df_existing = pd.DataFrame({ 'color': ['red', 'blue', 'green', 'red', 'blue'], 'food': ['apple', 'banana', 'apple', 'banana', 'apple'], 'age': [20, 25, 30, 35, 40], 'score': [5.0, 6.0, 7.0, 8.0, 9.0] }) # 若存在重复的color-food组合,用groupby聚合(示例取均值) score_mapping = df_existing.groupby(['color', 'food'])['score'].mean()
步骤2:批量填充新增数据
将新增数据与映射表做左连接,自动匹配填充score列,未匹配到的组合会保留NaN(可根据需求后续处理)。
# 新增数据示例:仅含color、food、age,score缺失 df_new = pd.DataFrame({ 'color': ['red', 'blue', 'yellow'], 'food': ['apple', 'banana', 'apple'], 'age': [45, 50, 55] }) # 左连接匹配填充score df_new_filled = df_new.merge( score_mapping.reset_index(), on=['color', 'food'], how='left' ) print(df_new_filled) # 输出结果: # color food age score # 0 red apple 45 5.0 # 1 blue banana 50 6.0 # 2 yellow apple 55 NaN
补充说明
- 如果已有数据中
color-food组合完全唯一,可以省略groupby,直接用drop_duplicates构建映射表:score_mapping = df_existing[['color', 'food', 'score']].drop_duplicates().set_index(['color', 'food'])['score'] - 若需要将填充后的数据合并回原始DataFrame,直接执行
pd.concat([df_existing, df_new_filled], ignore_index=True)即可。
内容的提问来源于stack exchange,提问作者Alice Silva
相关产品推荐
相关产品推荐

