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

如何用Pandas的groupby和max函数生成虚拟变量

解决方案

你的Python代码逻辑顺序错误,导致了AttributeError:你先计算了整个v2x_regime列的最大值,用np.where生成numpy数组后再尝试调用groupby,但numpy数组本身没有groupby方法,而且核心逻辑应该是先按年份分组计算每组的最大值,再和原数据逐行比较。

对应你R代码的Pandas实现,最贴合的写法是用groupby.transform,它能把分组计算的结果广播回原数据的每一行,和R中group_by后mutate的逻辑一致:

import pandas as pd
import numpy as np

# 直接在原DataFrame添加目标列
merged_data['biggest_democ'] = np.where(
    merged_data['v2x_regime'] == merged_data.groupby('year')['v2x_regime'].transform('max'),
    1,
    0
)

如果你习惯用assign方法(类似R中的mutate链式调用),也可以写成:

merged_data = merged_data.assign(
    biggest_democ = np.where(
        merged_data['v2x_regime'] == merged_data.groupby('year')['v2x_regime'].transform('max'),
        1,
        0
    )
)

关键逻辑说明

  • merged_data.groupby('year')['v2x_regime'].transform('max'):对每个year分组,计算该组内v2x_regime的最大值,返回一个和原数据行数相同的Series,每行对应所在年份的最大值。
  • np.where(条件, 1, 0):逐行判断原v2x_regime值是否等于对应年份的最大值,满足则设为1,否则设为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:19:21