pandas DataFrame按两列分组无需执行汇总聚合的实现方法
pandas返回的DataFrameGroupBy对象本身就已经完成了按year和state的分组逻辑,不需要强制调用聚合方法就能直接用于后续操作,你可以根据使用场景选择以下处理方式:
直接迭代GroupBy对象遍历每个分组
如果你需要逐个处理每个(year, state)组合的子数据集,直接遍历GroupBy对象即可,每次迭代会返回(分组键, 组内DataFrame)的元组:grouped = df.groupby(['Year', 'State']) # 遍历所有分组做统计检验、绘图等操作 for (year, state), group_df in grouped: # 此处添加你的分组处理逻辑 print(f"年份{year},州{state}的数据集行数:{len(group_df)}")拆分成分组字典方便按键查询
如果你需要随时调取指定(year, state)组合的数据集,可以把GroupBy对象转成字典:group_dict = dict(df.groupby(['Year', 'State'])) # 示例:调取2020年加利福尼亚州的对应数据 ca_2020_df = group_dict[(2020, 'California')]给原数据打分组标记
如果你不需要拆分子集,只是需要在原数据上区分不同分组,可以用ngroup()方法生成分组ID,相同year和state的行会被分配同一个ID:df['group_id'] = df.groupby(['Year', 'State']).ngroup()展开为按分组排列的完整DataFrame
如果你需要得到分组后不聚合的完整DataFrame,只需要调用apply直接返回分组本身即可:# pandas 1.3+版本可添加group_keys=False避免额外生成分组索引列 grouped_df = df.groupby(['Year', 'State'], group_keys=False).apply(lambda x: x)
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

