我一直在尝试弄清楚如何在应用 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 实际上并未命名该列)
您可以将
get_group
与 groups
一起使用
g=df.groupby(['col1','col2'])
g.get_group((list(g.groups)[0])).groupby(['col3','col4'])['col5'].sum()
gb = df.groupby(['col1', 'col2', 'col3', 'col4'])['col5'].sum()
gb.loc[[gb.index.levels[0][0]]])
我相信你需要:
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
for group_id, group_df in df.groupby(['col1', 'col2', 'col3', 'col4']):
break
迭代您的 groupby 对象并在第一次迭代后停止。变量 group_id 和 group_df 将包含您的第一个组。
一种丑陋的解决方法,但有效。