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

如何基于面板数据按连续季度交易情况创建active trader哑变量列

面板数据「活跃交易者」标记实现

需求说明

按ID分组为每个时期生成active列,规则如下:

  • 从该ID的首个时期开始,连续每个季度交易数(trading)>0时标记为1
  • 一旦出现trading=0的季度,该ID后续所有时期均标记为0

代码实现(Python Pandas)

import pandas as pd

# 示例数据加载(实际可替换为你的数据源)
data = {
    'ID': ['A','A','A','A','A','B','B','B','C','C','C','C'],
    'date': ['2020Q1','2020Q2','2020Q3','2020Q4','2021Q1','2019Q1','2019Q2','2019Q3','2021Q1','2021Q2','2021Q3','2021Q4'],
    'trading': [4,5,0,2,1,0,1,2,3,3,4,0]
}
df = pd.DataFrame(data)

# 定义分组处理逻辑
def mark_active(group):
    # 定位该组第一个交易数为0的行索引
    first_zero_pos = group[group['trading'] == 0].index.min()
    if pd.isna(first_zero_pos):
        # 无交易中断,全标记为活跃
        group['active'] = 1
    else:
        # 中断前标记1,中断及之后标记0
        group['active'] = 1
        group.loc[first_zero_pos:, 'active'] = 0
    return group

# 分组应用逻辑并整理结果
df = df.groupby('ID', group_keys=False).apply(mark_active)
df = df.sort_values(['ID', 'date']).reset_index(drop=True)

print(df)

逻辑说明

  1. 按ID分组后,对每个组查找第一个trading=0的位置
  2. 若组内无交易中断(无trading=0的行),所有行active标记为1
  3. 若存在交易中断,中断位置之前的行标记1,从中断行开始(含该行)所有行标记0
  4. 最后按ID和日期排序,保证数据时序正确

示例输入

ID  date   trading   
A   2020Q1 4         
A   2020Q2 5         
A   2020Q3 0         
A   2020Q4 2         
A   2021Q1 1         
B   2019Q1 0         
B   2019Q2 1         
B   2019Q3 2         
C   2021Q1 3         
C   2021Q2 3         
C   2021Q3 4         
C   2021Q4 0         

示例输出

ID  date   trading   active
A   2020Q1 4         1
A   2020Q2 5         1
A   2020Q3 0         0
A   2020Q4 2         0
A   2021Q1 1         0
B   2019Q1 0         0
B   2019Q2 1         0
B   2019Q3 2         0
C   2021Q1 3         1
C   2021Q2 3         1
C   2021Q3 4         1
C   2021Q4 0         0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 03:45:54