此问题与this other question类似。
我有一个pandas数据帧。我想将其拆分成组,并选择在其他地方定义的每个组的任意成员。
示例:我有一个数据框,可以分为6组,每组4个观察。我想根据以下内容提取观察结果:
selected = [0,3,2,3,1,3]
这与
非常相似df.groupy('groupvar').nth(n)
但是,至关重要的是,根据选择的列表, n 会因每个组而异。
谢谢!
答案 0 :(得分:1)
通常,您在groupby
内执行的所有操作都应与群组无关。因此,在任何groupby.apply()
内,您只能获得组本身,而不是上下文。另一种方法是从组的索引(此处为index
)中计算整个样本的index
值(以下为selected
)。请注意,数据集按组排序,如果要应用以下内容,则需要执行此操作。
我使用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