pandas分组聚合后如何将Date字段设为DataFrame的普通列
问题原因
pandas的groupby分组聚合操作默认会将指定的分组字段设置为结果DataFrame的行索引,不会作为普通列存储。你的代码里用Date作为分组键,所以聚合后Date变成了行索引,自然不会出现在columns返回的列名列表里,不是字段读取失败的问题。
解决方法
有两种最常用的方案可以把Date转为普通列,优先推荐第一种:
- 方案1:分组时直接关闭分组键转索引的默认设置,或者聚合完成后重置索引,代码改动最小:
c = df[['start day','near_penn','Date']] c = c.loc[c['near_penn']==1] # 写法1:groupby加as_index=False参数,分组键直接保留为普通列 pre_pandemic_df_new = c.groupby('Date', as_index=False).agg({'near_penn':'sum'}) # 写法2:聚合完成后链式调用reset_index(),把作为索引的Date转回普通列 # pre_pandemic_df_new = c.groupby('Date').agg({'near_penn':'sum'}).reset_index() print(pre_pandemic_df_new.columns) # 此时输出会同时包含Date和near_penn
- 方案2:手动将索引赋值为新列,再重置索引丢弃原索引:
pre_pandemic_df_new = c.groupby('Date').agg({'near_penn':'sum'}) pre_pandemic_df_new['Date'] = pre_pandemic_df_new.index pre_pandemic_df_new = pre_pandemic_df_new.reset_index(drop=True)
内容的提问来源于stack exchange,提问作者grooot
相关产品推荐
相关产品推荐

