使用索引列表从GroupBy中保留一些组。

问题描述 投票:0回答:1

你好,StackOverflowers!我有一个pandas DataFrame。

我有一个pandas DataFrame

df = pd.DataFrame({
    'A':[1,1,2,1,3,3,1,6,3,5,1],
    'B':[10,10,300,10,30,40,20,10,30,45,20],
    'C':[20,20,20,20,15,20,15,15,15,15,15],
    'D':[10,20,30,40,80,10,20,50,30,10,70],
    'E':[10,10,10,22,22,3,4,5,9,0,1]
})

然后,我把它分组,在一些列

groups = df.groupby(['A', 'B', 'C'])

我想根据groupby指数对原始数据进行选择过滤。

例如,我想从groupby指数中得到3个随机组合。

有什么想法吗?

python pandas pandas-groupby
1个回答
3
投票

而不是沿所有组迭代 len(indices) 时代,并在各自的 indices 值,得到一个组的列表。keys 词典中的 GroupBy.groups,并做单次呼叫 GroupBy.get_group 对于每个指数。

keys = list(groups.groups.keys())
# [(1, 10, 20), (1, 20, 15), (2, 300, 20)...
pd.concat([groups.get_group(keys[i]) for i in indices])

    A   B   C   D   E
6   1  20  15  20   4
10  1  20  15  70   1
5   3  40  20  10   3
4   3  30  15  80  22
8   3  30  15  30   9

0
投票

我可以做的是

groups = df.groupby(['A', 'B', 'C'])

indices = [1, 4, 3]
pd.concat([[df_group for names, df_group in groups][i] for i in indices])

其结果是.NET Framework 2.0。

Out[24]: 
    A   B   C   D   E
6   1  20  15  20   4
10  1  20  15  70   1
5   3  40  20  10   3
4   3  30  15  80  22
8   3  30  15  30   9

我想知道是否有更优雅的方法,也许已经在pd.groupby()中实现了?

© www.soinside.com 2019 - 2024. All rights reserved.