dan*_*n_g 3 python time-series pandas
我使用了一段代码,类似于下面显示的虚拟代码块,根据时间序列数据集中缺失天数(即该特定属性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()
Run Code Online (Sandbox Code Playgroud)
现在运行这个AttributeError: Cannot access callable attribute 'reset_index' of 'DataFrameGroupBy' objects, try using the 'apply' method,当我查看新文档时,我理解为什么它不起作用.
但是,我并不真正了解新的重采样方法是如何工作的,因此我们将不胜感激.
这将得到与0.17.1中相同的结果.我打开了一个关于能够做到这一点的问题.将尝试查看是否可以为0.18.1制作更好的语法,请参阅此处.仅供参考,您不需要在处理之前进行排序,重新采样总是会为您排序.
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
519 次 |
| 最近记录: |