2016-06-19 5 views
0

私の目的は、欠落しているデータを以前のデータに置き換え、同時に日付を再サンプリングするために、パンダに行を追加することです。例:アイテムごとにパンダで日付を再サンプリングする方法は?

date  wins losses 
2015-12-19 11   5 
2015-12-20 17   8 
2015-12-20 10   6 
2015-12-21 15   1 
2015-12-25 11   5 
2015-12-26 6   10 
2015-12-27 10   6 
2015-12-28 4   12 
2015-12-29 8   11 

そして、これは私が欲しいものです:: これは私が持っているものである

  wins losses 
date   
2015-12-19 11.0 5.0 
2015-12-20 10.0 6.0 
2015-12-21 15.0 1.0 
2015-12-22 15.0 1.0 
2015-12-23 15.0 1.0 
2015-12-24 15.0 1.0 
2015-12-25 11.0 5.0 
2015-12-26 6.0  10.0 
2015-12-27 10.0 6.0 
2015-12-28 4.0  12.0 
2015-12-29 8.0  11.0 

そして、これは私のコードです:それは作品

resamp = df.set_index('date').resample('D', how='last', fill_method='ffill') 

! しかし、同じことを2200万行(パンダ)、異なる日付、異なるIDで行いたい。

このデータフレームには2つのproductID(1と2)が含まれています。私は、同じ以前exerciceを行うと、すべてのproductIDの時間セリエデータを保存しておきたい。..

createdAt productId popularity 
2015-12-01 1    5 
2015-12-02 1    8 
2015-12-04 1    6 
2015-12-07 1    9 
2015-12-01 2    5 
2015-12-03 2    10 
2015-12-04 2    6 
2015-12-07 2    12 
2015-12-09 2    11 

これは私のコードです:

df['date'] = pd.to_datetime(df['createdAt']) 
df.set_index('date').resample('D', how='last', fill_method='ffill') 

これは私が同じコードを使用している場合、私が持っているものです!私は私の日付でグループバイをしたくありません。

  createdAt productId popularity 
date    
2015-12-01 2015-12-01 2    5 
2015-12-02 2015-12-02 2    5 
2015-12-03 2015-12-03 2    10 
2015-12-04 2015-12-04 2    6 
2015-12-05 2015-12-05 2    6 
2015-12-06 2015-12-06 2    6 
2015-12-07 2015-12-07 2    12 
2015-12-08 2015-12-08 2    12 
2015-12-09 2015-12-09 2    11 

これは私が欲しいものです!

createdAt productId popularity 
2015-12-01 1    5 
2015-12-02 1    8 
2015-12-03 1    8 
2015-12-04 1    6 
2015-12-05 1    6 
2015-12-06 1    6 
2015-12-07 1    9 
2015-12-01 2    5 
2015-12-02 2    5 
2015-12-03 2    10 
2015-12-04 2    6 
2015-12-05 2    6 
2015-12-06 2    6 
2015-12-07 2    12 
2015-12-08 2    12 
2015-12-09 2    11 

ありがとう

答えて

0

これを試してみてください、それが作品:)

print df.set_index('date').groupby('productId', group_keys=False).apply(lambda 
df: df.resample('D').ffill()).reset_index() 
0

これは、あなたが望むと言ったものを作り出します。

print df.groupby('productId', group_keys=False).apply(lambda df: df.resample('D').ffill()).reset_index() 

    createdAt productId popularity 
0 2015-12-01   1   5 
1 2015-12-02   1   8 
2 2015-12-03   1   8 
3 2015-12-04   1   6 
4 2015-12-05   1   6 
5 2015-12-06   1   6 
6 2015-12-07   1   9 
7 2015-12-01   2   5 
8 2015-12-02   2   5 
9 2015-12-03   2   10 
10 2015-12-04   2   6 
11 2015-12-05   2   6 
12 2015-12-06   2   6 
13 2015-12-07   2   12 
14 2015-12-08   2   12 
15 2015-12-09   2   11 
+0

は、お返事ありがとうござい必要があります。それは動作しますが、HeerrKönigが言ったように、私は "df.set_index( 'date')"を追加する必要がありました..私は新しい問題があります..私はこのエラーメッセージを持っています: "ValueError:制限する "。あなたの見解では、問題は何ですか?ありがとうございました – DataAddicted

関連する問題