使用Pandas GroupBy按列分组CSV数据时功能失效求解决
Pandas GroupBy功能失效,无法完成CSV格式转换
输入数据格式
输入CSV包含data(日期类型字段)、Period(时段字段)以及多个数值型字段,同一data和Period组合对应多行重复数据。
目标数据格式
按data和Period分组聚合,将同一分组内的各数值字段值合并为列表,每个分组仅保留一行数据。
问题代码
我编写了如下代码,但GroupBy功能未能正常工作:
def grouping(): df = pd.read_csv("final_data_6.csv") df['n'] = df.apply(lambda x: (x['data'], x['Period']), axis=1) df.groupby(['data','Period'])['n'].apply(list).reset_index() df.to_csv("final_data_9.csv", encoding="utf-8", index=False)
问题分析与解决方案
你的代码存在两个关键问题:
- 未接收分组结果:
df.groupby(...)操作会生成新的DataFrame,但你没有将这个结果赋值给变量,原df完全未被修改,导致输出的CSV还是原始数据。 - 分组逻辑错误:你创建的
n列是data和Period的元组,而这两个字段本身就是分组键,对该列聚合列表没有实际意义,应该针对需要合并的数值字段进行聚合操作。
修正后的代码
如果需要将同一data和Period分组下的所有其他字段值合并为列表,使用以下代码:
import pandas as pd def grouping(): df = pd.read_csv("final_data_6.csv") # 按data和Period分组,对所有其他列执行列表聚合 grouped_df = df.groupby(['data', 'Period'], as_index=False).agg(list) grouped_df.to_csv("final_data_9.csv", encoding="utf-8", index=False)
如果仅需对特定字段进行聚合,可指定字段名,例如只处理字段A和字段B:
grouped_df = df.groupby(['data', 'Period'], as_index=False)[['字段A', '字段B']].agg(list)
内容的提问来源于stack exchange,提问作者Sourabh Raj
相关产品推荐
相关产品推荐

