从前两组获得前两行

时间:2017-10-24 00:20:23

标签: python pandas pandas-groupby

考虑数据框redis.configuration.secure

gate-local.yml

如果按照索引的第一级分组,如何优雅地获取前两组的前两行:

df

2 个答案:

答案 0 :(得分:2)

选项1
您可以使用 list comp pd.concat

pd.concat([g.head(2) for _, g in df.groupby(level=0)][:2])

         col
one two     
a   t      0
    u      1
b   l      4
    m      5

由于列表comp完成是一个不必要的开销,您可以使用itertools.takewhile来防止这种情况发生。

it = itertools.takewhile(lambda x: x[0] < 2, enumerate(df.groupby(level=0)))
pd.concat([g.head(2) for _, (_, g) in it])

         col
one two     
a   t      0
    u      1
b   l      4
    m      5

选项2
我能想到的另一个可能的解决方案是预过滤你的df,只保留索引级别为0的前两个值的行,然后执行groupby。

# https://stackoverflow.com/a/46900625/4909087
df.loc[df.index.levels[0][:2].values].groupby(level=0).head(2)

         col
one two     
a   t      0
    u      1
b   l      4
    m      5

答案 1 :(得分:1)

看起来很讨厌,但这是我试过的

df.groupby(level=['one']).head(2)[:4]


       col
one two 
a   t   0
u   1
b   l   4
m   5