如何用同CustomerNr的非空Costs值填充DataFrame空单元格?
用同一客户编号的非空值填充DataFrame中Costs列的空单元格
解决方案代码
import pandas as pd # 初始化示例数据 df1 = pd.DataFrame([[1004,''], [1004, 'D'],[1005, 'C'], [1010,'A'], [1010,''],[1010,''],[1010,''],[1004, '']], columns=['CustomerNr','Costs']) # 把Costs列的空字符串转换为pandas可识别的缺失值 df1['Costs'] = df1['Costs'].replace('', pd.NA) # 按客户编号分组,用组内的非空值填充所有空单元格 df1['Costs'] = df1.groupby('CustomerNr')['Costs'].transform(lambda x: x.ffill().bfill()) # 查看结果 print(df1)
步骤说明
- 转换空字符串为缺失值:原数据中的空单元格是字符串
'',pandas的填充方法无法直接识别,所以先替换为pd.NA。 - 分组填充:通过
groupby('CustomerNr')将数据按客户编号分组,再用transform对每个组单独处理:ffill()会向前填充缺失值,bfill()会向后填充缺失值,两者结合可以确保不管非空值在组内的哪个位置,整个组的缺失值都会被该组的非空值覆盖。
最终输出
| CustomerNr | Costs |
|---|---|
| 1004 | D |
| 1004 | D |
| 1005 | C |
| 1010 | A |
| 1010 | A |
| 1010 | A |
| 1010 | A |
| 1004 | D |
内容的提问来源于stack exchange,提问作者j_90
相关产品推荐
相关产品推荐

