如何获取多列分组中的第一组?

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

我一直在尝试弄清楚如何在应用 groupby 后仅返回第一组。

我的代码如下所示:

gb = df.groupby(['col1', 'col2', 'col3', 'col4'])['col5'].sum()

我想要的是第一个第一组输出。我一直在尝试 get_group 方法,但它一直失败(也许是因为我按多列分组?)

这是我的输出示例:

col1  col2  col3   col4  'sum'
 1     34   green   10    0.0
            yellow  30    1.5 
            orange  20    1.1 
 2     89   green   10    3.0 
            yellow   5    0.0 
            orange  10    1.0

我想要退回的只是这个:

col1  col2  col3   col4  'sum'
 1     34   green   10    0.0
            yellow  30    1.5 
            orange  20    1.1 

(请注意我刚刚在此处添加的“总和”列,以明确最后一列是什么,但 pandas 实际上并未命名该列)

pandas pandas-groupby
4个回答
18
投票

您可以将

get_group
groups

一起使用
g=df.groupby(['col1','col2'])

g.get_group((list(g.groups)[0])).groupby(['col3','col4'])['col5'].sum()

5
投票
gb = df.groupby(['col1', 'col2', 'col3', 'col4'])['col5'].sum()

gb.loc[[gb.index.levels[0][0]]])

4
投票

我相信你需要:

idx = df.index.get_level_values(0)
df = df[idx == idx[0]] 

DataFrame.xs

df = df.xs(df.index.levels[0][0])

print (df)
                       'sum'
col1 col2 col3   col4       
1    34   green  10      0.0
          yellow 30      1.5
          orange 20      1.1

3
投票
for group_id, group_df in df.groupby(['col1', 'col2', 'col3', 'col4']):
    break

迭代您的 groupby 对象并在第一次迭代后停止。变量 group_id 和 group_df 将包含您的第一个组。

一种丑陋的解决方法,但有效。

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