You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DataFrame分组迭代操作后将结果同步回主DataFrame?

解决方案

你遇到的核心问题是:遍历groupby得到的df_group是原DataFrame的副本,修改副本不会同步到原数据。要在循环内直接让修改反映到主DataFrame,可以利用索引定位赋值的方式,具体实现如下:

循环内直接修改主DataFrame的方案

for group, df_group in df_dates.groupby(["team", "metric"]): 
    team, metric = group[0], group[1]
    # 简化_DEFAULT行的获取(用xs比loc更简洁)
    default_serie = df_group.xs("_DEFAULT", level=1).iloc[0]
    # 对当前分组执行fillna操作
    filled_group = df_group.apply(lambda row: row.fillna(default_serie), axis=1)
    # 关键:通过索引将修改后的数据直接赋值回原DataFrame
    df_dates.loc[filled_group.index] = filled_group

原理说明

  • df_group的索引和原df_dates中对应分组的行索引完全一致
  • 用df_dates.loc[filled_group.index]定位到原DataFrame中该分组的所有行,直接用填充后的filled_group覆盖,就能实现修改同步

更简洁的非循环替代方案(可选)

如果不想用循环,也可以直接用groupby.apply一次性完成所有分组的处理,代码更简洁:

def fill_group_with_default(df_group):
    default_serie = df_group.xs("_DEFAULT", level=1).iloc[0]
    return df_group.apply(lambda row: row.fillna(default_serie), axis=1)

# 直接覆盖原DataFrame
df_dates = df_dates.groupby(["team", "metric"]).apply(fill_group_with_default)

内容的提问来源于stack exchange,提问作者Fernando Jesus Garcia Hipola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:50:41