You need to enable JavaScript to run this app. 带股票与日期多层索引的Pandas DataFrame实现Dummy列0/1连续符号计数
优惠活动
大模型
产品
解决方案
定价
更多

带股票与日期多层索引的Pandas DataFrame实现Dummy列0/1连续符号计数

连续Dummy值计数实现方案

首先完成前置校验,保证数据按股票、交易时间升序排列,避免计数顺序错乱:

df = df.sort_index()

可直接通过以下代码生成符合规则的Counter列:

# 1. 按股票分组,标记连续相同Dummy值的分段ID
# 同组内Dummy与上一行取值不同时标记为新段,累计后得到唯一段号
segment_id = df.groupby(level='stock')['Dummy'].diff().ne(0).cumsum()

# 2. 按股票+连续段分组,计算段内从1开始的累计序号
seq = df.groupby(['stock', segment_id]).cumcount() + 1

# 3. 匹配正负规则:连续取值为1取正、连续取值为0取负
df['Counter'] = seq * (2 * df['Dummy'] - 1)

等价临时列写法

如果不习惯直接传入序列作为分组键,可通过临时列实现完全相同的逻辑:

df = df.sort_index()
# 存储分段ID的临时列
df['_seg'] = df.groupby(level='stock')['Dummy'].diff().ne(0).cumsum()
# 计算最终Counter列
df['Counter'] = (df.groupby(['stock', '_seg']).cumcount() + 1) * (2 * df['Dummy'] - 1)
# 删除临时列
df.drop(columns='_seg', inplace=True)

结果验证

执行代码后输出的Counter列与预期完全一致:

print(df)

输出效果:

Dummy  Counter
stock datetime                       
AAPL  2015-01-02      0       -1
      2015-01-03      0       -2
      2015-01-04      1        1
      2015-01-05      1        2
MSFT  2015-01-02      1        1
      2015-01-03      1        2
      2015-01-04      0       -1
      2015-01-05      1        1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 10:57:03