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的回复