如何计算各股票跨日期列的数值变化次数?
计算每只股票跨日期的数值变化次数
问题描述
给定如下股票每日数值数据集:
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
相关产品推荐
相关产品推荐

