pandas dataframe groupby并获取每个组的任意成员

时间:2014-07-15 14:20:04

标签: python pandas group-by

此问题与this other question类似。

我有一个pandas数据帧。我想将其拆分成组,并选择在其他地方定义的每个组的任意成员。

示例:我有一个数据框,可以分为6组,每组4个观察。我想根据以下内容提取观察结果:

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

这与

非常相似
df.groupy('groupvar').nth(n)

但是,至关重要的是,根据选择的列表, n 会因每个组而异。

谢谢!

1 个答案:

答案 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