pandas使用groupby配合resample时报列重复:countyFIPS同时出现在索引和数据中
解决方案
错误原因
你遇到的列重复问题是两类数据的字段类型差异导致的:州级数据的分组键State为字符串类型,执行sum()聚合时不会被纳入数值计算范围,仅作为索引存在;而县级数据的分组键countyFIPS是数值类型,sum()会默认对所有数值字段求和,因此countyFIPS既存在于分组索引中,又会作为求和后的数值列出现在数据列,重复列名触发sort_values报错。
可行修复方案
方案1:指定需要聚合的字段,从源头避免非业务列参与计算
提前筛选出仅需要求和的确诊病例相关列,排除countyFIPS等不需要聚合的字段即可:
# 替换示例中列表内的字段为你实际不需要参与求和的字段名 exclude_cols = ['countyFIPS', 'date', 'County Name', 'State'] use_cols = [col for col in df_covid_data_c.columns if col not in exclude_cols] df_covid_data_c = df_covid_data_c.groupby("countyFIPS")\ .resample('W-SAT', label='right', closed = 'right', on='date')[use_cols]\ .sum()\ .sort_values(by=['countyFIPS','date'])
方案2:聚合后删除重复列
如果需要保留原有计算逻辑,可在聚合后直接删除列中重复的countyFIPS字段:
df_covid_data_c = df_covid_data_c.groupby("countyFIPS")\ .resample('W-SAT', label='right', closed = 'right', on='date')\ .sum()\ .drop('countyFIPS', axis=1)\ .sort_values(by=['countyFIPS','date'])
方案3:显式指定聚合规则避免冗余计算
pandas 1.3及以上版本可通过numeric_only参数显式控制聚合范围,再配合删除重复列实现需求:
df_covid_data_c = df_covid_data_c.groupby("countyFIPS")\ .resample('W-SAT', label='right', closed = 'right', on='date')\ .sum(numeric_only=True)\ .drop('countyFIPS', axis=1)\ .sort_values(by=['countyFIPS','date'])
内容的提问来源于stack exchange,提问作者Jonathan Hay
相关产品推荐
相关产品推荐

