2014-07-15 42 views
0

這個問題類似於this other questionpandas dataframe groupby並獲得每個組的任意成員

我有一個熊貓數據框。我想將它分成組,並選擇每個組的任意成員,在別處定義。

例如:我有一個數據幀可以分成6組,每組4個觀察值。我想根據提取意見:

selected = [0,3,2,3,1,3] 

這是非常相似的

df.groupy('groupvar').nth(n) 

但關鍵的是,ñ根據選擇列表中爲每個組變化。

謝謝!

回答

1

通常情況下,您在groupby內所做的所有操作都應該獨立於組。因此,在任何groupby.apply()內,您只會獲得組本身,而不是上下文。另一種方法是從組的索引(此處爲selected)中計算整個樣本的index值(以下爲index)。請注意,數據集按組進行排序,如果要應用以下內容,則需要執行此操作。

我用test,在外面我想選擇selected

In[231]: test 
Out[231]: 
      score 
    name   
0 A -0.208392 
1 A -0.103659 
2 A  1.645287 
0 B  0.119709 
1 B -0.047639 
2 B -0.479155 
0 C -0.415372 
1 C -1.390416 
2 C -0.384158 
3 C -1.328278 

selected = [0, 2, 1] 
c = test.groupby(level=1).count() 
In[242]: index = c.shift(1).cumsum().add(array([selected]).T, fill_value=0) 
In[243]: index 
Out[243]: 
     score 
name  
A   0 
B   5 
C   4 
In[255]: test.iloc[index.values[:,0]] 
Out[255]: 
      score 
    name   
0 A -0.208392 
2 B -0.479155 
1 C -1.390416 
+0

感謝@FooBar快速回復。不幸的是,它不適用於我:當試圖應用你的行'c = test.groupby(level = 1).count()'時,我得到'ValueError:level> 0只對MultiIndex有效。我認爲這一定是由於我的原始數據沒有被索引爲(0,1,2,0,1,2),而是(0,1,2,3,4,...)。在你申請你的解決方案之前,你是否已經按'name'分組文本? – PaoloCrosetto

+0

@PaoloCrosetto對不起,遲到的迴應,一定會引起我的注意。是的,我已經用'name'分組 - 這就是爲什麼你在數據表示中看到'score'下的'name'一行:後者是一列,而前者是一個索引。如果你展示了一部分數據,我可以看到我將如何實現它 - 如果你在實現它時仍然有問題。 – FooBar

+0

謝謝。我設法讓你的解決方案工作。我沒有在最後的腳本中使用它,因爲我通過簡化問題找到了更簡單的解決方案。由於每個組都有4個觀測值,我只需要改變'selected'列表並在數據幀上做一個簡單的選擇。 – PaoloCrosetto

相關問題