Pandas groupby聚合后reset_index触发cannot insert col1错误如何解决
错误原因
你执行groupby操作时将col1指定为分组键,默认情况下分组键会作为结果的索引存在。后续agg聚合时你又对col1执行了求和运算,聚合输出的列名默认也为col1,此时聚合结果中同时存在索引层的col1和普通列层的col1。执行reset_index()时需要把索引里的col1转成普通列,就会和已有的同名列触发重名冲突,抛出报错。
解决方案
- 方案1(推荐,适配Pandas 0.25+版本):在
agg时直接给聚合列指定新名称,避免重名
df.groupby(["col1","col2"]).agg( col3_count = ("col3", "count"), col1_sum = ("col1", "sum") ).reset_index()
- 方案2(适配旧版本Pandas):聚合后先修改列名再执行
reset_index()
# 先得到聚合结果,此时列名还是col3、col1 agg_df = df.groupby(["col1","col2"]).agg({"col3": "count","col1":"sum"}) # 手动重命名聚合列 agg_df.columns = ["col3_count", "col1_sum"] # 再重置索引就不会冲突 result = agg_df.reset_index()
- 方案3:设置
as_index=False让分组键直接作为普通列返回,无需额外执行reset_index()
df.groupby(["col1","col2"], as_index=False).agg( col3_count = ("col3", "count"), col1_sum = ("col1", "sum") )
内容的提问来源于stack exchange,提问作者tester559
相关产品推荐
相关产品推荐

