微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – pandas> = 0.18 – 更改为重新采样,如何使用groupby进行上采样

我正在使用一段类似于下面所示的伪代码块的代码,以根据时间序列数据集中缺失天数(即该特定属性ID没有数据的天数)的属性ID插入NaN值.

使用pandas 0.18.0更改重采样方法已经打破了这段代码,我无法弄清楚如何实现相同的行为.

码:

data = [['2010-01-01', 'A', 2], ['2010-01-02', 'A', 3], ['2010-01-05', 'A', 8], 
        ['2010-01-10', 'A', 7], ['2010-01-13', 'A', 3], ['2010-01-01', 'B', 5], 
        ['2010-01-03', 'B', 2], ['2010-01-04', 'B', 1], ['2010-01-11', 'B', 7], 
        ['2010-01-14', 'B', 3]]

df = pd.DataFrame(data, columns=['Date', 'ID', 'score'])
df.Date = pd.to_datetime(df.Date)

#Insert NA values on days where there is no data for each ID
df.sort_values(by=['Date', 'ID'], inplace=True)
df.set_index('Date').groupby('ID').resample('D').reset_index()

现在运行它会产生AttributeError:无法访问’DataFrameGroupBy’对象的可调用属性’reset_index’,尝试使用’apply’方法,当我查看新文档时,我理解为什么它不起作用.

但是,我并不真正了解新的重采样方法是如何工作的,因此我们将不胜感激.

解决方法:

这将得到与0.17.1中相同的结果.我打开了一个关于能够做到这一点的问题.将尝试查看是否可以为0.18.1制作更好的语法,请参阅here.仅供参考,您不需要在处理之前进行排序,重新采样总是会为您排序.

In [27]: df.groupby('ID').apply(lambda x: x.set_index('Date').score.resample('D').asfreq())
Out[27]: 
ID  Date      
A   2010-01-01    2.0
    2010-01-02    3.0
    2010-01-03    NaN
    2010-01-04    NaN
    2010-01-05    8.0
    2010-01-06    NaN
    2010-01-07    NaN
    2010-01-08    NaN
    2010-01-09    NaN
    2010-01-10    7.0
    2010-01-11    NaN
    2010-01-12    NaN
    2010-01-13    3.0
B   2010-01-01    5.0
    2010-01-02    NaN
    2010-01-03    2.0
    2010-01-04    1.0
    2010-01-05    NaN
    2010-01-06    NaN
    2010-01-07    NaN
    2010-01-08    NaN
    2010-01-09    NaN
    2010-01-10    NaN
    2010-01-11    7.0
    2010-01-12    NaN
    2010-01-13    NaN
    2010-01-14    3.0
Name: score, dtype: float64

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐