2016-03-30 77 views
2

我有一個DataFrame看起來像這樣蟒蛇熊貓滾動窗口,並重新創建數據幀

df = pd.DataFrame({'user' : ['A', 'A', 'A', 'B', 'B', 'B','B'], 
        'attritube1' : [0,1,1,1,0,2,9], 
        'attritube2':[1,2,3,3,0,0,1]}) 
print(df) 

    attritube1 attritube2 user 
0   0   1 A 
1   1   2 A 
2   1   3 A 
3   1   3 B 
4   0   0 B 
5   2   0 B 
6   9   1 B 

我想與長度K個爲每個用戶滾動窗口切片數據,並創建一個新的數據組。例如,如果K = 2,那麼,我想獲得

attritube1 attritube2 user 
0   0   1 A 
1   1   2 A 
--------------------------------- 
2   1   2 A 
3   1   3 A 
--------------------------------- 
4   1   3 B 
5   0   0 B 
--------------------------------- 
6   0   0 B 
7   2   0 B 
-------------------------------- 
8   2   0 B 
9   9   1 B 

同樣,如果K = 3,則新的數據幀應該是

attritube1 attritube2 user 
0   0   1 A 
1   1   2 A 
2   1   3 A 
-------------------------------- 
3   1   3 B 
4   0   0 B 
5   2   0 B 
-------------------------------- 
6   0   0 B 
7   2   0 B 
8   9   1 B 

我們可以假設所有用戶,行數> = K。謝謝!

編輯:想澄清我想重複每個用戶的滾動窗口過程(玩具示例中的A,B)。

回答

1

嘗試:

k=3 
pd.concat([df.groupby('user').apply(lambda x: pd.concat([x.iloc[i: i + k] for i in range(len(x.index) - k + 1)]))]) 


     attribute1 attribute2 user 
user        
A 0   0   1 A 
    1   1   2 A 
    2   1   3 A 
B 3   1   3 B 
    4   0   0 B 
    5   2   0 B 
    4   0   0 B 
    5   2   0 B 
    6   9   1 B 
+0

我想澄清一下,我想爲每個用戶重複滾動窗口過程(請參閱「用戶」列)。對不起,如果它不是我的原始文章清楚。 – user42361

+0

嗨Stefan,謝謝你的幫助!但是輸出與發佈中顯示的k = 3的樣本輸出不同。 – user42361

+0

看到更新,我認爲新版本給你你正在尋找的。 – Stefan

0
df = pd.DataFrame({'user' : ['A', 'A', 'A', 'B', 'B', 'B','B','A', 'A', 'A', 'B', 'B', 'C','B','A', 'C', 'C', 'B', 'B', 'B','B'], 
       'attritube1' : [0,1,1,1,0,2,9,0,1,1,1,0,2,9,0,1,1,1,0,2,9], 
       'attritube2':[1,2,3,3,0,0,1,0,1,1,1,0,2,9,0,1,1,1,0,2,9]}) 


# creating Multi Index Data Frame 
m_df=df.set_index(df["user"],append=True) 
m_df=m_df.swaplevel(0,1,axis=0) 


k=2 


final_df=pd.concat([m_df.loc[item].iloc[:k] for item in sorted(set(df["user"]))]) 
final_df.index=range(final_df.shape[0]) # to resort the index 


print final_df 

這個答案使用多指數數據幀和它一步一步來,這(至少對我來說)是一個小更易於閱讀。

+0

我想澄清,我想重複滾動窗口過程爲每個用戶(請參閱「用戶」欄)。對不起,如果它不是我的原始文章清楚。 – user42361