基于多列条件的Pandas DataFrame Dept列NaN值填充技术问询
解决方法
针对你的需求,可以通过以下步骤实现指定的NaN值填充:
实现代码
方法1:高效向量化操作(适合大数据集)
import pandas as pd # 生成「任务编号」到「对应部门」的映射:仅保留印刷机为Beta且描述为Outsource的有效记录 dept_mapping = df[(df['印刷机'] == 'Beta') & (df['描述'] == 'Outsource')].groupby('任务编号')['部门'].first() # 筛选需要填充的行:印刷机为Beta且部门为空的记录 fill_mask = (df['印刷机'] == 'Beta') & df['部门'].isna() # 执行填充 df.loc[fill_mask, '部门'] = df.loc[fill_mask, '任务编号'].map(dept_mapping)
方法2:apply遍历实现(逻辑直观,小数据集适用)
import pandas as pd # 生成任务编号与部门的映射字典 dept_dict = df[(df['印刷机'] == 'Beta') & (df['描述'] == 'Outsource')].set_index('任务编号')['部门'].to_dict() # 逐行判断并填充 df['部门'] = df.apply( lambda row: dept_dict.get(row['任务编号'], row['部门']) if row['印刷机'] == 'Beta' and pd.isna(row['部门']) else row['部门'], axis=1 )
说明
- 两种方法都会先提取
Beta印刷机下,描述为Outsource的部门值,并按任务编号建立映射关系 - 仅对「印刷机为Beta且部门为空」的行进行填充,其他场景的NaN值保持不变
- 运行后得到的DataFrame将完全匹配你给出的期望结果
内容的提问来源于stack exchange,提问作者GAT3273
相关产品推荐
相关产品推荐

