2016-02-18 141 views
0

我有一個數據幀定義如下:熊貓數據幀重新採樣不凝聚

import datetime 
import pandas as pd 
import random 
import numpy as np 

todays_date = datetime.datetime.today().date() 
index = pd.date_range(todays_date - datetime.timedelta(10), periods=10, freq='D') 
index = index.append(index) 
idname = ['A']*10 + ['B']*10 
values = random.sample(xrange(100), 20) 
data = np.vstack((idname, values)).T 

tmp_df = pd.DataFrame(data, columns=['id', 'value']) 
tmp_index = pd.DataFrame(index, columns=['date']) 
tmp_df = pd.concat([tmp_index, tmp_df], axis=1) 
tmp_df = tmp_df.set_index('date') 

注意,存在用於每個日期2倍的值。我想每週重新採樣數據幀tmp_df,但保留兩個單獨的值。我試過tmp_df.resample('W-FRI'),但它似乎沒有工作。

+0

您希望的輸出是什麼?你會得到什麼錯誤? – IanS

+0

我的解決方案適合您嗎? – IanS

回答

1

您正在尋找的解決方案是groupby,它可以讓你對數據框片(這裏「A」和「B」)獨立執行操作:

df.groupby('id').resample('W-FRI') 

注:您的代碼產生一個錯誤(No numeric types to aggregate ),因爲'value'列未轉換爲int。您需要先將其轉換爲:

df['value'] = pd.to_numeric(df['value']) 
+1

謝謝你。我並沒有意識到通過groupby()這樣做,所以學到了一些新東西。我打算通過不同的id值來旋轉它,以獲得與問題相同的結果。 – nwly