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

如何计算各股票跨日期列的数值变化次数?

计算每只股票跨日期的数值变化次数

问题描述

给定如下股票每日数值数据集:

date    3/1/2023    3/2/2023    3/3/2023    3/4/2023    3/5/2023    3/6/2023    3/7/2023    3/8/2023    3/9/2023    3/10/2023   3/11/2023   3/12/2023
symbol                                              
AAPL    3   4   1   4   0   0   0   1   2   3   1   1
AMGN    0   2   2   4   0   4   3   1   2   0   0   2
AXP     2   0   0   0   1   1   1   3   1   1   0   2
BA      2   2   0   4   2   4   4   0   0   4   0   2
CAT     2   3   4   3   1   1   1   3   1   1   4   0

需要计算每只股票的数值在相邻日期间的变化次数:仅当相邻日期数值不同时计为一次变化,连续相同数值不计入。例如AAPL的变化次数为8次。

解决方案(使用Python Pandas)

可以通过以下步骤快速实现:

1. 导入工具并加载数据

先将数据集转换为Pandas DataFrame,处理空格分隔的格式:

import pandas as pd

# 加载数据集(如果是本地文件,替换为对应文件路径)
data_str = """date    3/1/2023    3/2/2023    3/3/2023    3/4/2023    3/5/2023    3/6/2023    3/7/2023    3/8/2023    3/9/2023    3/10/2023   3/11/2023   3/12/2023
symbol                                              
AAPL    3   4   1   4   0   0   0   1   2   3   1   1
AMGN    0   2   2   4   0   4   3   1   2   0   0   2
AXP     2   0   0   0   1   1   1   3   1   1   0   2
BA      2   2   0   4   2   4   4   0   0   4   0   2
CAT     2   3   4   3   1   1   1   3   1   1   4   0"""

df = pd.read_table(pd.io.common.StringIO(data_str), sep='\\s+', header=0, index_col='symbol')
df = df.drop('date', axis=1)  # 移除冗余的date列标识

2. 计算变化次数

通过差值判断相邻数值是否不同,再统计次数:

# 计算相邻日期的数值差,统计非零差值的数量(即变化次数)
change_counts = df.diff(axis=1).ne(0).sum(axis=1)

# 输出结果
print(change_counts)

3. 运行结果

执行代码后会得到每只股票的变化次数:

symbol
AAPL    8
AMGN    9
AXP     6
BA      8
CAT     7
dtype: int64

其中AAPL的结果与题目示例一致。

原理说明

  • diff(axis=1):对每一行(单只股票)计算相邻日期列的数值差,连续相同的数值差值为0,不同则为非0值。
  • ne(0):将差值转换为布尔值,非0值标记为True,代表一次有效变化。
  • sum(axis=1):对每一行的布尔值求和,得到该股票的总变化次数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:22:38