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

pandas中基于企业、年份生成永久生效哑变量的高效实现方法

高效实现方案

核心思路是用Pandas原生的矢量化分组累积操作替代逐行循环,性能提升可达数百倍,适合大规模数据集。

实现步骤

  • 先对数据集按企业ID、年份排序,确保时间顺序正确,避免原始数据乱序导致逻辑错误
  • 构造标记列:Value == 2的位置标记为1,其余为0
  • 按企业ID分组,对标记列做累积最大值操作:只要该企业到当前行为止出现过1(即出现过Value=2),后续所有行的累积最大值都会保持为1
  • 用1减去上述累积最大值,即可得到符合要求的Desired字段

完整代码

import pandas as pd

# 构造示例数据,实际使用时替换成自己的数据集即可
d = {'firm_id': ["0000001" , "0000001","0000001","0000001","0000001","0000001","0000002","0000002","0000002","0000003",
                "0000003","0000003","0000003"], 
     'year': [2000,2001,2002,2003,2004,2005,2000,2001,2002,2000,2001,2002,2003],
    'Value':[1,1,2,2,1,1,2,2,2,1,1,1,1]}
df = pd.DataFrame(data=d)

# 核心逻辑
df = df.sort_values(['firm_id', 'year']).reset_index(drop=True)
df['Desired'] = 1 - df.assign(flag=lambda x: x['Value'] == 2)\
                      .groupby('firm_id')['flag']\
                      .cummax()\
                      .astype(int)

结果验证

运行后输出的Desired字段和示例完全一致:

firm_idyearValueDesired
0000001200011
0000001200111
0000001200220
0000001200320
0000001200410
0000001200510
0000002200020
0000002200120
0000002200220
0000003200011
0000003200111
0000003200211
0000003200311

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:15:06