簡體   English   中英

pandas> = 0.18 - 更改為重新采樣,如何使用groupby進行上采樣

[英]pandas >= 0.18 - changes to resample, how to upsample with 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: 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM