我有一个数据框,其索引为零散日期,列名为'id'和'num'。我想对'id'列进行
我的样本数据集如下:
pd.groupby
分组,并将每个组中的索引重新排序应用于数据框。我的样本数据集如下:
id num
2015-08-01 1 3
2015-08-05 1 5
2015-08-06 1 4
2015-07-31 2 1
2015-08-03 2 2
2015-08-06 2 3
当我使用ffill
对pd.reindex
进行操作时,我的期望输出为:
id num
2015-08-01 1 3
2015-08-02 1 3
2015-08-03 1 3
2015-08-04 1 3
2015-08-05 1 5
2015-08-06 1 4
2015-07-31 2 1
2015-08-01 2 1
2015-08-02 2 1
2015-08-03 2 2
2015-08-04 2 2
2015-08-05 2 2
2015-08-06 2 3
我已经尝试过其他方法,但是都没有成功:
newdf=df.groupby('id').reindex(method='ffill')
这会返回错误:AttributeError: Cannot access callable attribute 'reindex' of 'DataFrameGroupBy' objects, try using the 'apply' method
如果有帮助,将不胜感激。
return df.resample('D').fillna(method='ffill')
。这样做的额外好处是,如果你只想要工作日,可以将重采样部分中的“D”更改为“B”(当然,这取决于你的需求)。 - PilikPilik
的方法可行吗?因为我最初尝试使用resample
,但它没有添加缺失的日期。你也可以在pd.date_range
中实现不同的时间段,例如使用pd.date_range(.., offset='B')
来表示工作日。 - JoeCondronpd.date_range
有一个偏移选项。我复制了使用pd.read_clipboard()
的示例,并且我的解决方案使用resample
也产生了所需的结果。 - PilikNaN
。如果我改变函数使用df.reindex(dates, method='ffill')
,它会给我一个TypeError: Cannot compare type 'Timestamp' with type 'str'
。 - GiacomoDatetimIndex
看起来与包含形式为'YYYY-MM-DD'
的字符串的索引相同。你可以使用pd.to_datetime
进行转换。 - JoeCondron