pandas>=0.18更改重新采样,如何使用groupby向上采样

2024-04-20 13:58:34 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的代码段中,使用一个名为“天”的属性来插入一个名为“天”的假代码。在

pandas 0.18.0对resample方法的更改破坏了这段代码,我不知道如何实现相同的行为。在

代码:

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: Cannot access callable attribute 'reset_index' of 'DataFrameGroupBy' objects, try using the 'apply' method,当我查看新文档时,我理解了它为什么不起作用。在

然而,我并不真正理解新的重采样方法是如何工作的,因此一些澄清将不胜感激。在


Tags: 方法代码iddataframepandasdfdatadate
1条回答
网友
1楼 · 发布于 2024-04-20 13:58:34

这将产生与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

相关问题 更多 >