簡體   English   中英

使用groupby和resample對熊貓進行升采樣

[英]Pandas upsampling using groupby and resample

我將時間序列與缺口分組。 我不想填補空白,尊重團體。

每個id date都是唯一的。

以下工作有效,但給了我零,而我不想使用NaN

data.groupby('id').resample('D', on='date').sum()\
    .drop('id', axis=1).reset_index()

以下由於某種原因不起作用

data.groupby('id').resample('D', on='date').asfreq()\
    .drop('id', axis=1).reset_index()

data.groupby('id').resample('D', on='date').fillna('pad')\
    .drop('id', axis=1).reset_index()

我收到以下錯誤: Upsampling from level= or on= selection is not supported, use .set_index(...) to explicitly set index to datetime-like

我嘗試將pandas.Grouperset_index多級索引或單索引一起使用,但是它似乎並未對我的日期列進行升采樣,因此我得到連續的日期,或者它不尊重id列。

熊貓是0.23版

自己嘗試:

data = pd.DataFrame({
'id': [1,1,1,2,2,2],
'date': [
    datetime(2018, 1, 1),
    datetime(2018, 1, 5),
    datetime(2018, 1, 10),
    datetime(2018, 1, 1),
    datetime(2018, 1, 5),
    datetime(2018, 1, 10)],
'value': [100, 110, 90, 50, 40, 60]})

# Works but gives zeros
data.groupby('id').resample('D', on='date').sum()
# Fails
data.groupby('id').resample('D', on='date').asfreq()
data.groupby('id').resample('D', on='date').fillna('pad')

創建DatetimeIndex並刪除參數onresample

print (data.set_index('date').groupby('id').resample('D').asfreq())
                id
id date           
1  2018-01-01  1.0
   2018-01-02  NaN
   2018-01-03  NaN
   2018-01-04  NaN
   2018-01-05  1.0
   2018-01-06  NaN
   2018-01-07  NaN
   2018-01-08  NaN
   2018-01-09  NaN
   2018-01-10  1.0
2  2018-01-01  2.0
   2018-01-02  NaN
   2018-01-03  NaN
   2018-01-04  NaN
   2018-01-05  2.0
   2018-01-06  NaN
   2018-01-07  NaN
   2018-01-08  NaN
   2018-01-09  NaN
   2018-01-10  2.0

print (data.set_index('date').groupby('id').resample('D').fillna('pad'))
#alternatives
#print (data.set_index('date').groupby('id').resample('D').ffill())
#print (data.set_index('date').groupby('id').resample('D').pad())
               id
id date          
1  2018-01-01   1
   2018-01-02   1
   2018-01-03   1
   2018-01-04   1
   2018-01-05   1
   2018-01-06   1
   2018-01-07   1
   2018-01-08   1
   2018-01-09   1
   2018-01-10   1
2  2018-01-01   2
   2018-01-02   2
   2018-01-03   2
   2018-01-04   2
   2018-01-05   2
   2018-01-06   2
   2018-01-07   2
   2018-01-08   2
   2018-01-09   2
   2018-01-10   2

編輯:

如果想使用sum缺失值需要min_count=1參數- sum

min_count :int,默認0執行操作所需的有效值數量。 如果存在少於min_count個非NA值,則結果將為NA。

0.22.0版中的新增功能:添加了默認值0。這表示全NA或空系列的總和為0,全NA或空系列的乘積為1。

print (data.groupby('id').resample('D', on='date').sum(min_count=1))

暫無
暫無

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

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