Python 复制dataframe groupby并获取每个组的任意成员
这个问题类似于 我有一个熊猫数据框。我想把它分成几个组,并从每个组中选择一个任意的成员,在别处定义 示例:我有一个数据帧,可以分为6组,每组4个观察值。我想根据以下内容提取观察结果: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()中,您将只获得组本身,而不是上下文。另
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个观察值,我只需要更改“已选择”列表,并在数据框上进行简单选择。