2016-12-06 99 views
1

我有一個數據幀,看起來像這樣:大熊貓據幀插值/重採樣每日數據

userid  date   count 
a   2016-12-01 4 
a   2016-12-03 5 
a   2016-12-05 1 
b   2016-11-17 14 
b   2016-11-18 15 
b   2016-11-23 4 

的第一列是用戶ID,第二列是一個日期(導致從一個groupby(pd.TimeGrouper('d')),第三列是每日計數。但是,每個用戶,我想確保在用戶的最小和最大日期之間缺少的任何日期填充爲0所以如果我從上面的數據框開始,我會得到這樣一個數據框:

userid  date   count 
    a   2016-12-01 4 
    a   2016-12-02 0 
    a   2016-12-03 5 
    a   2016-12-04 0 
    a   2016-12-05 1 
    b   2016-11-17 14 
    b   2016-11-18 15 
    b   2016-11-19 0 
    b   2016-11-20 0 
    b   2016-11-21 0 
    b   2016-11-22 0 
    b   2016-11-23 4 

我知道有多種方法可以用熊貓數據幀進行重新採樣(帶有選擇插入向前,向後或平均的選項),但是如何在上述意義上做到這一點,我需要連續時間序列每個用戶標識,但時間序列的日期在每個用戶中是不同的?

這裏就是我試過,沒有奏效:

grouped_users = user_daily_counts.groupby('user').set_index('timestamp').resample('d', fill_method = None)

然而,這會引發錯誤AttributeError: Cannot access callable attribute 'set_index' of 'DataFrameGroupBy' objects, try using the 'apply' method。我不知道如何在提出所有列的同時使用apply方法,因爲我願意這樣做。

感謝您的任何建議!

回答

3

您可以使用groupbyresample,但首先需要Datetimeindexset_index創建。
need pandas 0.18.1 and higher

然後通過0通過asfreqfillna填充NaN

最後刪除列useridreset_index

df = df.set_index('date') 
     .groupby('userid') 
     .resample('D') 
     .asfreq() 
     .fillna(0) 
     .drop('userid', axis=1) 
     .reset_index() 

print (df) 
    userid  date count 
0  a 2016-12-01 4.0 
1  a 2016-12-02 0.0 
2  a 2016-12-03 5.0 
3  a 2016-12-04 0.0 
4  a 2016-12-05 1.0 
5  b 2016-11-17 14.0 
6  b 2016-11-18 15.0 
7  b 2016-11-19 0.0 
8  b 2016-11-20 0.0 
9  b 2016-11-21 0.0 
10  b 2016-11-22 0.0 
11  b 2016-11-23 4.0 

如果想D型列count整數加astype

df = df.set_index('date') \ 
     .groupby('userid') \ 
     .resample('D') \ 
     .asfreq() \ 
     .fillna(0) \ 
     .drop('userid', axis=1) \ 
     .astype(int) \ 
     .reset_index() 

print (df) 
    userid  date count 
0  a 2016-12-01  4 
1  a 2016-12-02  0 
2  a 2016-12-03  5 
3  a 2016-12-04  0 
4  a 2016-12-05  1 
5  b 2016-11-17  14 
6  b 2016-11-18  15 
7  b 2016-11-19  0 
8  b 2016-11-20  0 
9  b 2016-11-21  0 
10  b 2016-11-22  0 
11  b 2016-11-23  4 
+0

謝謝!我沒有考慮重新排序set_index,事實上,它總是讓我感到困惑,因爲有重複的日期,但將它們設置爲索引仍然有效? – helloB

+0

是的,但每組必須是唯一的。感謝接受。 – jezrael