【问题标题】:Infill NAs with another dataframe用另一个数据框填充 NA
【发布时间】:2021-12-26 00:18:41
【问题描述】:

我有一个时间序列数据框如下;


            Volume
1992-04-01  357.073
1992-04-02  341.931
1992-04-03  318.777
1992-04-04  312.494
1992-04-05  270.837
.
.
.
2002-12-31  283.78


有些数据有缺口,我想用“10 年正常值”来填补这些缺口;

我可以通过以下方式生成法线;

df_norm = df.groupby(by=[df.index.month, df.index.day]).mean()

返回;

        Volume
1       337.1108
2       362.6250
3   1    354.4670
4       364.3080
5       374.0428

然后我尝试用 df_norm 填充 df 的(),但努力让它正确;

这不起作用,因为索引不同..

df  = df.asfreq('d')
df  = df.set_index(df.index.day).fillna(df_fut).set_index(df.index)

有没有办法解决这个问题?

任何帮助将不胜感激!

【问题讨论】:

  • 什么是df_fut?你想用 10 年的平均值或 nan 所在年份的平均值来填充 nan?
  • df_fut 是该特定日期的 10 年平均值。是的,前者是正确的——我想用 10 年的平均值填充 nan。例如,如果缺少 1994 年 1 月 3 日,它将用其他 01 年 3 月的平均值填充。

标签: python pandas dataframe time-series multi-index


【解决方案1】:

这应该可行:

df['Volume'] = df['Volume'].fillna(df.groupby(by=[df.index.month & df.index.day])['Volume'].transform('mean'))

【讨论】:

  • 非常感谢!
  • 不幸的是,这实际上失败了,出现错误“ValueError: Grouper and axis must be same length”.. 你知道是什么原因造成的吗?
  • 啊,这是因为 NaN 导致长度不同。也许有一种方法可以用平均值制作一个新的数据框,然后用新的数据框填充旧数据框的 NaN……虽然索引很棘手
猜你喜欢
  • 1970-01-01
  • 2018-04-20
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多