Python基于类别为另一列填充对应值的Pandas操作问题
Pandas 基于分类列填充对应数值的实现方法
核心逻辑为:先基于已有的分类-数值映射表构造匹配关系,再对应填充到目标表的number列,以下是两种常用实现方案:
方案1:map映射实现(推荐,性能最优)
适合分类和数值为唯一对应关系的场景,实现代码如下:
import pandas as pd # 你已有的分类映射表df df = pd.DataFrame({'category':['apple', 'banana', 'grape', 'cat', 'jelly'], 'number':[2,3,25,4,1]}) # 待填充的目标表,这里替换为你自己的目标表变量名 df_target = pd.DataFrame({ 'category': ['apple', 'banana', 'apple', 'grape', 'cat', 'jelly', 'cat', 'grape'], 'name': ['aliya', 'reeva', 'dev', 'ruby', 'cosmo', 'jack', 'goldy', 'frr'] }) # 1. 构造分类到数值的映射字典 mapping = df.set_index('category')['number'].to_dict() # 2. 匹配填充number列 df_target['number'] = df_target['category'].map(mapping)
如果仅需要填充目标表原有number列的缺失值,不覆盖已有的有效值,可修改为如下代码:
df_target['number'] = df_target['number'].fillna(df_target['category'].map(mapping))
方案2:merge合并实现
适合需要同时合并多个字段的场景,通过左连接保证目标表所有行都保留:
# 取目标表除number外的字段,和映射表左连接匹配数值 df_target = df_target[['category', 'name']].merge(df, on='category', how='left')
内容的提问来源于stack exchange,提问作者chixcy
相关产品推荐
相关产品推荐

