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

如何按Style、Gender、Region分组数据并向下填充值(Pandas)

问题:DataFrame分组后实现Style和Region的向下填充

我尝试在DataFrame中基于Style、Gender和Region对列表值进行分组,并实现值的向下填充。目前用groupby得到的结果里Style和Region没有完成向下填充,不确定当前方法是否合适,或者直接操作原始列表lst会不会更好。

相关代码:

import pandas as pd

lst = [
        ['Tee','Boy','East','12','11.04'],
        ['Golf','Boy','East','12','13'],
        ['Fancy','Boy','East','12','11.96'],
        ['Tee','Girl','East','10','11.27'],
        ['Golf','Girl','East','10','12.12'],
        ['Fancy','Girl','East','10','13.74'],
        ['Tee','Boy','West','11','11.44'],
        ['Golf','Boy','West','11','12.63'],
        ['Fancy','Boy','West','11','12.06'],
        ['Tee','Girl','West','15','13.42'],
        ['Golf','Girl','West','15','11.48']
    ]


df1 = pd.DataFrame(lst, columns = ['Style','Gender','Region','Units','Price'])

df2 = df1.groupby(['Style','Region','Gender']).count()

问题分析

你当前用groupby(...).count()的思路不对:这个操作是统计每个分组的行数,而你的原始数据中每个(Style,Region,Gender)组合本来就只有一行,所以结果里的数值都是1,完全不符合你想要的向下填充展示需求。

解决方案

方案1:实现类似Excel合并单元格的显示效果(推荐)

如果只是想要显示时让重复的Style、Region值隐藏(看起来像向下填充),不需要修改原始数据,用Pandas的Styler功能即可:

import pandas as pd

lst = [
        ['Tee','Boy','East','12','11.04'],
        ['Golf','Boy','East','12','13'],
        ['Fancy','Boy','East','12','11.96'],
        ['Tee','Girl','East','10','11.27'],
        ['Golf','Girl','East','10','12.12'],
        ['Fancy','Girl','East','10','13.74'],
        ['Tee','Boy','West','11','11.44'],
        ['Golf','Boy','West','11','12.63'],
        ['Fancy','Boy','West','11','12.06'],
        ['Tee','Girl','West','15','13.42'],
        ['Golf','Girl','West','15','11.48']
    ]

df1 = pd.DataFrame(lst, columns=['Style','Gender','Region','Units','Price'])

# 构建Style、Region、Gender的多级索引
df2 = df1.set_index(['Style', 'Region', 'Gender'])

# 隐藏重复的上层索引值,实现向下填充的视觉效果
styled_df = df2.style.hide(axis='index', level=[0, 1])

# 在Jupyter等环境中执行可渲染成带合并效果的表格
display(styled_df)

方案2:在数据中实际填充重复值

如果需要修改数据本身,让重复的Style、Region值真的填充到对应行,可以用ffill()(向前填充):

import pandas as pd

lst = [
        ['Tee','Boy','East','12','11.04'],
        ['Golf','Boy','East','12','13'],
        ['Fancy','Boy','East','12','11.96'],
        ['Tee','Girl','East','10','11.27'],
        ['Golf','Girl','East','10','12.12'],
        ['Fancy','Girl','East','10','13.74'],
        ['Tee','Boy','West','11','11.44'],
        ['Golf','Boy','West','11','12.63'],
        ['Fancy','Boy','West','11','12.06'],
        ['Tee','Girl','West','15','13.42'],
        ['Golf','Girl','West','15','11.48']
    ]

df1 = pd.DataFrame(lst, columns=['Style','Gender','Region','Units','Price'])

# 先按Style、Region、Gender排序,确保填充顺序正确
df3 = df1.sort_values(['Style', 'Region', 'Gender'])

# 对Style和Region列执行向前填充
df3[['Style', 'Region']] = df3[['Style', 'Region']].ffill()

print(df3)

内容的提问来源于stack exchange,提问作者Rasec Malkic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:05:22