python - 从前两组中获取前两行

标签 python pandas pandas-groupby

考虑数据框df

mux = pd.MultiIndex.from_arrays([
    list('aaaabbbbbccdddddd'),
    list('tuvwlmnopxyfghijk')
], names=['one', 'two'])

df = pd.DataFrame({'col': np.arange(len(mux))}, mux)

df

         col
one two     
a   t      0
    u      1
    v      2
    w      3
b   l      4
    m      5
    n      6
    o      7
    p      8
c   x      9
    y     10
d   f     11
    g     12
    h     13
    i     14
    j     15
    k     16

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

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

最佳答案

选项 1
您可以使用列表comppd.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

由于完成列表比较是不必要的开销,因此您可以使用 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

关于python - 从前两组中获取前两行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46900357/

相关文章:

python - 根据随机选择的列生成随机天数

pandas-返回包含每年最大值的月份

python - 导入错误: uncompyle2 even though it's installed

python - 用字典实现算法

python - 使用 Pandas 搜索文本中的所有匹配项

python - 将 'apply' 与 Pandas 数据框元素中的数组一起使用

python - get_dummies 在 pandas 中的用法

python - 在具有多个列的单个 groupby 中聚合一堆不同的数据

使用 pyside-uic 生成 Python 代码

python - Pandas 分配 Lambda 函数