如何按code分组,用同日期的actual_value填充该列缺失值?
按分组填充同日期的缺失值
需求说明
对给定的DataFrame df,按code字段分组,每组内相同date的行,用该日期已存在的actual_value有效值填充该列的NaN值(注:同一日期的actual_value值均相同)。
原始DataFrame
date actual_value fitted_value predicted_value code 0 2023/8/31 NaN NaN 520.994413 LX0301 1 2023/9/30 NaN NaN 580.967973 LX0301 2 2023/10/31 NaN NaN 650.392867 LX0301 3 2023/8/31 471.459992 520.027310 NaN LX0301 4 2023/9/30 NaN NaN 531.199547 LX0301 5 2023/10/31 NaN NaN 600.053484 LX0301 6 2023/8/31 471.459992 511.902229 NaN LX0301 7 2023/9/30 480.400211 518.202630 NaN LX0301 8 2023/10/31 NaN NaN 537.890792 LX0301 9 2023/8/31 NaN NaN 99.216818 LX0101 10 2023/9/30 NaN NaN 98.624779 LX0101 11 2023/10/31 NaN NaN 98.690596 LX0101 12 2023/8/31 99.400000 99.221767 NaN LX0101 13 2023/9/30 NaN NaN 98.822977 LX0101 14 2023/10/31 NaN NaN 98.875062 LX0101 15 2023/8/31 99.400000 99.220693 NaN LX0101 16 2023/9/30 98.700000 98.802146 NaN LX0101 17 2023/10/31 NaN NaN 98.738091 LX0101
期望结果
date actual_value fitted_value predicted_value code 0 2023/8/31 471.459992 NaN 520.994413 LX0301 1 2023/9/30 480.400211 NaN 580.967973 LX0301 2 2023/10/31 NaN NaN 650.392867 LX0301 3 2023/8/31 471.459992 520.027310 NaN LX0301 4 2023/9/30 480.400211 NaN 531.199547 LX0301 5 2023/10/31 NaN NaN 600.053484 LX0301 6 2023/8/31 471.459992 511.902229 NaN LX0301 7 2023/9/30 480.400211 518.202630 NaN LX0301 8 2023/10/31 NaN NaN 537.890792 LX0301 9 2023/8/31 99.400000 NaN 99.216818 LX0101 10 2023/9/30 98.700000 NaN 98.624779 LX0101 11 2023/10/31 NaN NaN 98.690596 LX0101 12 2023/8/31 99.400000 99.221767 NaN LX0101 13 2023/9/30 98.700000 NaN 98.822977 LX0101 14 2023/10/31 NaN NaN 98.875062 LX0101 15 2023/8/31 99.400000 99.220693 NaN LX0101 16 2023/9/30 98.700000 98.802146 NaN LX0101 17 2023/10/31 NaN NaN 98.738091 LX0101
解决方案
利用groupby结合transform方法,按code和date分组后,用组内的有效值填充NaN。由于同一组内的actual_value有效值完全相同,使用first()/max()/mean()均可获取到该有效值:
方法一:使用first()
df['actual_value'] = df.groupby(['code', 'date'])['actual_value'].transform('first')
方法二:使用max()
df['actual_value'] = df.groupby(['code', 'date'])['actual_value'].transform('max')
方法说明
- 按
code和date分组,确保每个分组对应同一代码下的同一日期的所有行 transform方法会保留原DataFrame的索引结构,将分组计算的结果映射回原位置- 因为同一分组内的
actual_value有效值一致,first()会取分组内第一个非NaN值,max()会取分组内的最大值(即唯一的有效值),从而完成NaN填充
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

