python - 如何对齐多个数据帧的索引并填充 Pandas 中的相应缺失值?

标签 python pandas dataframe reindex datetimeindex

我有 4 个数据帧,其中包含类似日期时间索引的数据,但是在每个数据帧中几乎没有缺失的行,我知道可以使用以前的已知数据来填补这些空白。

我想“对齐”这些数据帧,以便它们具有所有数据帧的索引并集并填充缺失值。 我知道如何为 2 个数据帧执行此操作:df1, df2 = df1.align(df2, axis=0, method='pad'),但是对于超过2?

我试过了,确实有效:

df1 = pd.DataFrame({'values': 1}, index=pd.DatetimeIndex(['2016-06-01', '2016-06-03']))
df2 = pd.DataFrame({'values': 2}, index=pd.DatetimeIndex(['2016-06-02', '2016-06-04', '2016-06-07']))
df3 = pd.DataFrame({'values': 3}, index=pd.DatetimeIndex(['2016-06-01', '2016-06-05']))

commonIndex = df1.index.join(df2.index, how='outer').join(df3.index, how='outer')

for d in [df1, df2, df3]:
    d = d.reindex(index=commonIndex, method='pad')

然而,当我对我的真实数据尝试相同的方法时,它给出了错误:“ValueError:索引必须是单调增加或减少”。是价格数据,索引是这样的:

DatetimeIndex(['2014-03-24 00:00:00', '2014-03-24 00:01:00',
           '2014-03-24 00:02:00', '2014-03-24 00:03:00',
           '2014-03-24 00:04:00', '2014-03-24 00:05:00',
           '2014-03-24 00:06:00', '2014-03-24 00:07:00',
           '2014-03-24 00:08:00', '2014-03-24 00:09:00',
           ...
           '2014-10-10 17:51:00', '2014-10-10 17:52:00',
           '2014-10-10 17:53:00', '2014-10-10 17:54:00',
           '2014-10-10 17:55:00', '2014-10-10 17:56:00',
           '2014-10-10 17:57:00', '2014-10-10 17:58:00',
           '2014-10-10 17:59:00', '2014-10-10 18:00:00'],
          dtype='datetime64[ns]', name=u'datetime', length=139671, freq=None)

据我了解应该会增加。不确定“单调”,但我认为它不是上面示例中所示的约束(仍然缺少日期)。

非常感谢任何帮助,如果我使用的术语不正确,请原谅我。

附言当我遍历数据帧列表时,看起来它们在应用重新索引后实际上并未保存在 df1、df2、df3 中。我该如何解决?

最佳答案

这是您要实现的行为吗?请注意,无论数据帧上的索引是否单调,此方法都有效。

df1 = pd.DataFrame({'values': 1}, index=pd.DatetimeIndex(['2016-06-01', '2016-06-03']))
df2 = pd.DataFrame({'values': 2}, index=pd.DatetimeIndex(['2016-06-02', '2016-06-04', '2016-06-07']))
df3 = pd.DataFrame({'values': 3}, index=pd.DatetimeIndex(['2016-06-01', '2016-06-05']))

df = pd.concat([df1,df2,df3], axis=1).ffill().bfill()
df.columns = ['values1', 'values2', 'values3']
df

给出:

          values1  values2  values3
2016-05-04  1.0     2.0     3.0
2016-06-01  1.0     2.0     3.0
2016-06-02  1.0     2.0     3.0
2016-06-03  1.0     2.0     3.0
2016-06-05  1.0     2.0     3.0

或者,如果您只想将数据框分开,那么无论数据框是否具有单调索引,这也都有效。

commonIndex = df1.index | df2.index | df3.index
df2.reindex(commonIndex).ffill()

编辑:

我这里有一个片段重现了你的错误,但我认为它作为自己的问题效果更好 - 所以 take a look here .

关于python - 如何对齐多个数据帧的索引并填充 Pandas 中的相应缺失值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37981678/

相关文章:

python - 异步 : [ERROR] Task was destroyed but it is pending

python - 使用列表理解根据字符长度从系列中删除字符串Python

r - R中的单独小时和分钟

python - 将计算值/差值除以先前值 -> 'slope'

python - 将货币插入 SQL 数据库

python - 将当前过滤器选择提供给 Django 中的另一个自定义 SimpleListFilter

python-3.x - 如何建立一个包含同一组中每个国家/地区的值(value)观的字典

python - 比较两个单元格值并提取差异

r - 如何在函数 rowsum 中使用 'group' 参数

python - 如何从源数组分配目标数组的子集?