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

Python pandas如何分组并根据列的特定值生成对应新列

Pandas实现主客场指标行转列分组方案

你需要的是将HA维度的行记录拆分为主客场独立列,按Team(含你代码框架里的Liga字段)分组输出,以下是两种可直接运行的实现方式:


方式1:基于你已写的groupby+agg框架实现

完全贴合你现有代码结构,直接补全agg逻辑即可:

df_ad = df_calc.groupby(['Team', 'Liga']).agg(
    Home_attack=('attack', lambda s: s[df_calc.loc[s.index, 'HA'] == 'Home'].iloc[0]),
    Home_defense=('defense', lambda s: s[df_calc.loc[s.index, 'HA'] == 'Home'].iloc[0]),
    Away_attack=('attack', lambda s: s[df_calc.loc[s.index, 'HA'] == 'Away'].iloc[0]),
    Away_defense=('defense', lambda s: s[df_calc.loc[s.index, 'HA'] == 'Away'].iloc[0])
).reset_index()

方式2:用pivot行转列实现(更简洁高效)

和你给出的CASE WHEN SQL逻辑完全等价,是pandas处理这类行转列需求的标准写法,可读性和执行效率都更高:

# 按HA维度拆分指标为多列
df_ad = df_calc.pivot(
    index=['Team', 'Liga'],
    columns='HA',
    values=['attack', 'defense']
)
# 拼接多层列名为目标格式:主客场_指标名
df_ad.columns = [f'{ha}_{metric}' for metric, ha in df_ad.columns]
# 重置索引把Team、Liga从索引转回普通列
df_ad = df_ad.reset_index()

补充说明

  • 以上代码默认每个Team+Liga+HA组合下只有1条记录,如果存在多条重复记录,把代码里的.iloc[0]替换成你需要的聚合规则即可,比如取均值用.mean()、求和用.sum()
  • 如果输出列顺序和你预期的Home_attack、Home_defense、Away_attack、Away_defense不一致,加一行代码重排即可:
    df_ad = df_ad[['Team', 'Liga', 'Home_attack', 'Home_defense', 'Away_attack', 'Away_defense']]
    

输入表样例:
输入表样例
输出表样例:
输出表样例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 08:54:19