通常情況下,您在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
感謝@FooBar快速回復。不幸的是,它不適用於我:當試圖應用你的行'c = test.groupby(level = 1).count()'時,我得到'ValueError:level> 0只對MultiIndex有效。我認爲這一定是由於我的原始數據沒有被索引爲(0,1,2,0,1,2),而是(0,1,2,3,4,...)。在你申請你的解決方案之前,你是否已經按'name'分組文本? – PaoloCrosetto
@PaoloCrosetto對不起,遲到的迴應,一定會引起我的注意。是的,我已經用'name'分組 - 這就是爲什麼你在數據表示中看到'score'下的'name'一行:後者是一列,而前者是一個索引。如果你展示了一部分數據,我可以看到我將如何實現它 - 如果你在實現它時仍然有問題。 – FooBar
謝謝。我設法讓你的解決方案工作。我沒有在最後的腳本中使用它,因爲我通過簡化問題找到了更簡單的解決方案。由於每個組都有4個觀測值,我只需要改變'selected'列表並在數據幀上做一個簡單的選擇。 – PaoloCrosetto