2013-11-20 12 views
0

我有一個數據幀,看起來像這樣:重新取樣大熊貓數據幀只需要知道結果測量計數

Trial Measurement Data 
    0    0  12 
        1  4 
        2  12 
    1    0  12 
        1  12 
    2    0  12 
        1  12 
        2  NaN 
        3  12 

我想重新取樣我的數據,使每個試驗只有兩個測量 所以我想將它變成什麼像這樣:

Trial Measurement Data 
    0    0  8 
        1  8 
    1    0  12 
        1  12 
    2    0  12 
        1  12 

這並不常見任務,從我的數據對刺激呈現的部分故意抖動的事實造成的。

我知道大熊貓有一個二次採樣函數,但我不知道如何將它應用到我的第二級指標,同時保持在不同的類別中的數據基礎上,一級指標:(

另外,我想要迭代,在我的一級指標,但顯然

for sub_df in np.arange(len(df['Trial'].max())) 

不會因爲工作,因爲'Trial'是一個索引大熊貓不能找到它。

+0

如何(0,1 )變成8而不是12,但(2,1)變成6(以NaN爲零而不是丟失的數據)?你的重採樣規則是什麼?數據前半部分的平均值和最後一部分的平均值,允許重疊,並將NaN設置爲0? – DSM

+0

我沒有預先定義的重採樣規則,我必須堅持。我舉了一個例子,因爲它看起來很直觀。的確,然而,最好將NaN視爲缺失的數據。是的,由於重疊,第一個值變爲8。我仍然認爲這是最好的方法。每次試用我都有〜256個值,所以一個值的重疊在任何情況下都不會有什麼區別。 – TheChymera

+0

你是否需要像這樣編制索引,它可能更容易,因爲只是列和使用groupby –

回答

1

嗯,這不是我一直最漂亮曾經見過,但從框架看起來像

>>> df 
    Trial Measurement Data 
0  0   0 12 
1  0   1  4 
2  0   2 12 
3  1   0 12 
4  1   1 12 
5  2   0 12 
6  2   1 12 
7  2   2 NaN 
8  2   3 12 

那麼我們可以手動生成兩個「平均樣」的對象,然後使用pd.melt重塑輸出:

avg = df.groupby("Trial")["Data"].agg({0: lambda x: x.head((len(x)+1)//2).mean(), 
             1: lambda x: x.tail((len(x)+1)//2).mean()}) 
result = pd.melt(avg.reset_index(), "Trial", var_name="Measurement", value_name="Data") 
result = result.sort("Trial").set_index(["Trial", "Measurement"]) 

產生

>>> result 

        Data 
Trial Measurement  
0  0    8 
     1    8 
1  0    12 
     1    12 
2  0    12 
     1    12 
+0

我可以使它更通用,以便它perfoms這些操作不只是在「數據」?我有11個數據列實際上^^ – TheChymera