如何用周度日期替换月度DataFrame日期并按条件填充数据?
解决方案
步骤1:统一日期匹配标识
先给两个DataFrame添加年月关联列,用来匹配同一国家、同一月份的数据:
import pandas as pd # 若日期列不是datetime类型,先转换 a['date'] = pd.to_datetime(a['date']) b['date'] = pd.to_datetime(b['date']) # 给a提取年月(如2020-01)作为匹配键 a['year_month'] = a['date'].dt.to_period('M') # 给b提取周度日期所属的年月,作为匹配键 b['year_month'] = b['date'].dt.to_period('M')
步骤2:关联数据并填充值
通过merge方法按country和year_month关联两个DataFrame,保留目标列:
# 合并数据,用b的周度日期、country关联a的barley_yie值 result = pd.merge( b[['date', 'country', 'year_month']], a[['country', 'year_month', 'barley_yie']], on=['country', 'year_month'], how='left' ) # 删除临时关联列,整理成目标格式 result = result.drop('year_month', axis=1)
步骤3:验证结果
最终生成的resultDataFrame会呈现你需要的结构:每个周度日期对应所属月份的barley_yie值,按国家维度匹配填充,示例如下:
| date | country | barley_yie |
|---|---|---|
| 2022-01-01 | Argentina | 3.33 |
| 2020-01-07 | Argentina | 3.33 |
| 2020-01-14 | Argentina | 3.33 |
补充处理
如果存在周度日期找不到对应月份数据的情况,barley_yie会显示NaN,可根据需求用fillna补充默认值:
# 示例:用0填充空值,也可替换为其他合理值 result['barley_yie'] = result['barley_yie'].fillna(0)
内容的提问来源于stack exchange,提问作者Arghya Ganguly
相关产品推荐
相关产品推荐

