pandas数据框按组分组并获取每组的任意成员

0 投票
1 回答
1097 浏览
提问于 2025-04-18 13:24

这个问题和另一个问题很相似。

我有一个pandas的数据表(dataframe)。我想把它分成几个组,然后从每个组中选出一个特定的成员,这个成员是我之前定义好的。

举个例子:我有一个数据表,可以分成6个组,每组有4个观察值。我想根据以下内容提取这些观察值:

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

这和

df.groupy('groupvar').nth(n)

非常相似,但关键是,n在每个组中是不同的,具体取决于selected这个列表。

谢谢!

1 个回答

1

通常来说,在使用 groupby 的时候,你做的每一件事都应该和组无关。也就是说,在任何 groupby.apply() 的过程中,你只能获取到当前的组,而无法获取到其他的上下文信息。一个替代的方法是计算整个样本的 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

撰写回答