pandas数据框按组分组并获取每组的任意成员
这个问题和另一个问题很相似。
我有一个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