为DataFrame补全缺失数据与日期 按分组向前填充指定列
解决方法:按分组对指定列执行向前填充(Forward Fill)
嘿,我来帮你搞定这个需求!基于你描述的场景,我们可以用Pandas的分组、重索引和填充方法来实现,下面是具体步骤和代码示例:
步骤说明
- 确保日期列是datetime类型:Pandas对时间序列的操作依赖于正确的日期格式,所以首先要把字符串格式的日期转换成datetime类型。
- 生成完整的日期序列:因为你的数据有固定的日期范围(3/31/1960到6/30/1960),我们需要为每个A、B组合生成这个范围内的所有日期,避免原数据中缺失日期导致填充不完整。
- 分组后填充:按A、B列分组,对每个组补全缺失的日期,再对C、D列执行向前填充。
完整代码示例
import pandas as pd # 假设你的原始DataFrame名为df,先转换日期列格式 df['日期'] = pd.to_datetime(df['日期']) # 生成指定范围内的完整日期序列 full_date_range = pd.date_range(start='1960-03-31', end='1960-06-30') # 分组处理:补全日期 + 向前填充C、D列 final_df = df.groupby(['A', 'B']).apply( lambda group: ( group.set_index('日期') .reindex(full_date_range) .ffill(subset=['C', 'D']) # 仅对C、D列执行向前填充 .reset_index() ) ).reset_index(drop=True) # 把重索引后的index列改回原日期列名 final_df = final_df.rename(columns={'index': '日期'})
补充说明
- 如果你的原始数据中,每个A、B分组内的日期已经是连续无缺失的,那可以简化操作,直接分组后对C、D列执行填充:
final_df = df.groupby(['A', 'B'])[['C', 'D']].ffill() ffill()方法会用前一行的非空值填充当前行的NaN,确保每个分组内的C、D列数据按日期向前延续。
内容的提问来源于stack exchange,提问作者qfd
相关产品推荐
相关产品推荐

