Python 复制dataframe groupby并获取每个组的任意成员

Python 复制dataframe groupby并获取每个组的任意成员,python,pandas,group-by,Python,Pandas,Group By,这个问题类似于 我有一个熊猫数据框。我想把它分成几个组,并从每个组中选择一个任意的成员,在别处定义 示例:我有一个数据帧,可以分为6组,每组4个观察值。我想根据以下内容提取观察结果: selected = [0,3,2,3,1,3] 这与 df.groupy('groupvar').nth(n) 但是,至关重要的是,根据所选列表,每个组的n都有所不同 谢谢 通常,您在groupby中执行的所有操作都应该与组无关。因此,在任何groupby.apply()中,您将只获得组本身,而不是上下文。另

这个问题类似于

我有一个熊猫数据框。我想把它分成几个组,并从每个组中选择一个任意的成员,在别处定义

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

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

df.groupy('groupvar').nth(n)
但是,至关重要的是,根据所选列表,每个组的n都有所不同


谢谢

通常,您在
groupby
中执行的所有操作都应该与组无关。因此,在任何
groupby.apply()
中,您将只获得组本身,而不是上下文。另一种方法是从组的索引中计算整个样本(以下,
索引
)的
索引
值(此处,
所选
)。请注意,数据集是按组排序的,如果要应用以下内容,则需要执行此操作

我使用
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仅对多索引有效。我想这一定是因为我的原始数据没有索引为您的(0,1,2,0,1,2),而是(0,1,2,3,4,…)。在这里应用您的解决方案之前,您是否已按“名称”对文本进行分组?@PaoloCrosetto很抱歉反应太晚,我一定没有注意到。是的,我已经按
名称
进行了分组-这就是为什么您在数据表示中看到
名称
下的
得分
下有一行:后者是一列,而前者是索引。如果您展示一部分数据,我可以看到如何实现它——如果您在实现它时仍然有问题的话。谢谢。我设法让你的解决方案发挥作用。我没有在最后的脚本中使用它,因为我通过简化问题找到了一个更简单的解决方案。由于每组设计有4个观察值,我只需要更改“已选择”列表,并在数据框上进行简单选择。