Python 如何阻止聚合函数向dataframe添加不需要的行?

Python 如何阻止聚合函数向dataframe添加不需要的行?,python,pandas,dataframe,Python,Pandas,Dataframe,我编写了一行代码,将数据帧按列分组 df=df.groupby(['where','when']).agg({'col1':['max'],'col2':['sum']}) 使用上述代码后,输出中的聚合列有两个额外的行,“max”和“sum”占据了“col1”和“col2”索引下的一列。看起来是这样的: 可乐 可乐 最大值 总和 哪里 什么时候 家 1. A. A. 工作 2. B B 您需要的是预先将列名传递给聚合函数 使用以下命令: df = df.groupby(['where','whe

我编写了一行代码,将数据帧按列分组

df=df.groupby(['where','when']).agg({'col1':['max'],'col2':['sum']})

使用上述代码后,输出中的聚合列有两个额外的行,“max”和“sum”占据了“col1”和“col2”索引下的一列。看起来是这样的:

可乐 可乐 最大值 总和 哪里 什么时候 家 1. A. A. 工作 2. B B 您需要的是预先将列名传递给聚合函数

使用以下命令:

df = df.groupby(['where','when']).agg(col1 = ('col1', 'max'), col2 = ('col2', 'sum')).reset_index()
数据帧:

   where  when  col1  col2
0  home     1     1     1
1  work     2     2     2
2  home     1     3     3
输出:

   where  when  col1  col2
0  home     1     3     3
1  work     2     2     2
更新:

我们可以将
as_index=False
传递给groupby,groupby将停止pandas将键作为索引,因此之后不需要重置索引

df = df.groupby(['where','when'], as_index = False).agg(col1 = ('col1', 'max'), col2 = ('col2', 'sum'))

请同时发布您的预期输出。@MayankPorwal编辑了它。如果您删除聚合中的方括号,pandas将不会添加“max”和“sum”列标签:
。agg({'col1':'max','col2':'sum'})
(然后您可以
重置_index()
以按Amit所述展平列索引)@tdy这很好。我没有意识到这一点。您也可以将
添加为\u index=False
到groupby。请注意,另一个区别是您的聚合方式。OP使用了
agg({'col1':['max'],'col2':['sum']})
这实际上添加了
max
min
标签(即使OP不需要这些标签)。@tdy更新了解释。如果在groupby中像
df.groupby(['where','when'],as_index=False)那样使用
as_index=False
,则不需要重置索引。agg(col1=('col1','max'),col2=('col2','sum'))
非常有效。感谢@AmitVikramSingh and tdy的回复