Pandas按color与fruit分组向前填充value列缺失值问题
解决组内向前填充不跨组的问题
问题分析
你之前的代码错误在于:
- 将
date加入了groupby的分组键,导致每个(color, fruit, date)被视为独立分组,mean()后每个分组仅保留一个值 - 后续的
ffill是全局执行的,而非限定在color和fruit的组内,因此出现跨组填充的问题
正确实现步骤
- 先按
color、fruit、date排序,确保每个组内的日期顺序正确(向前填充依赖行顺序) - 仅以
color和fruit作为分组键,对value列执行组内向前填充
完整代码
import pandas as pd import numpy as np # 原数据 data = pd.DataFrame({'color': ['Green','Green', 'Green', 'Green', 'Red', 'Red'], 'fruit' : ['Banana', 'Banana', 'Apple', 'Apple', 'Banana', 'Apple'], 'date': ['2011-01-01', '2011-01-02', '2011-01-01', '2011-01-02', '2011-02-01', '2011-02-01'], 'value': [ 1, np.nan, np.nan, 2, 3 , np.nan]}) # 排序保证组内日期顺序 data_sorted = data.sort_values(['color', 'fruit', 'date']) # 组内向前填充 data_sorted['value'] = data_sorted.groupby(['color', 'fruit'])['value'].ffill() # 重置索引匹配期望输出格式 result = data_sorted.reset_index(drop=True) print(result)
输出结果
color fruit date value 0 Green Apple 2011-01-01 NaN 1 Green Apple 2011-01-02 2.0 2 Green Banana 2011-01-01 1.0 3 Green Banana 2011-01-02 1.0 4 Red Banana 2011-02-01 3.0 5 Red Apple 2011-02-01 NaN
注:你给出的期望输出中Red被写成了Yellow,属于笔误,上述结果为基于原数据的正确输出。
内容的提问来源于stack exchange,提问作者Stan
相关产品推荐
相关产品推荐

