
在数据分析和处理中,我们经常需要对数据中的连续模式进行识别和计数。例如,在股票交易数据中,我们可能需要统计连续上涨或下跌的天数。更进一步,如果希望这个计数在达到某个特定阈值后自动重置,传统的循环遍历方法可能会效率低下,尤其是在处理大型数据集时。
本教程的目标是展示如何使用Pandas的矢量化操作,高效地解决以下问题:给定一个DataFrame,其中包含一个表示信号(例如1代表上涨,-1代表下跌)的列,我们需要创建一个新的列来统计连续相同信号的序列长度。此外,这个计数必须在达到预设的阈值(本例中为5)时自动重置。
假设我们有以下初始DataFrame:
import pandas as pd
data = {
'price': [13, 12, 11, 12, 13, 14, 14, 14, 14, 14, 14],
'sign': [1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1]
}
df = pd.DataFrame(data)
print("原始DataFrame:")
print(df)期望得到的输出结果如下,其中count列表示连续序列的计数,并在达到5时重置:
price sign count 0 13 1 1 1 12 1 2 2 11 -1 1 3 12 -1 2 4 13 1 1 5 14 1 2 6 14 1 3 7 14 1 4 8 14 1 5 9 14 1 1 10 14 1 2
解决此问题的关键在于巧妙地结合Pandas的几个核心功能:shift()、ne()、cumsum()、groupby()和cumcount(),并辅以模运算符(%)来实现计数重置。
识别连续块:df['sign'].ne(df['sign'].shift()).cumsum()
例如,对于sign列 [1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1]:
组内累积计数:groupby(...).cumcount()
实现计数重置:% 5 + 1
将上述概念组合起来,即可得到简洁高效的矢量化解决方案:
df['count'] = df.groupby(df['sign'].ne(df['sign'].shift()).cumsum()).cumcount() % 5 + 1
print("\n处理后的DataFrame:")
print(df)输出结果:
处理后的DataFrame:
price sign count
0 13 1 1
1 12 1 2
2 11 -1 1
3 12 -1 2
4 13 1 1
5 14 1 2
6 14 1 3
7 14 1 4
8 14 1 5
9 14 1 1
10 14 1 2可以看到,count列完美地实现了对连续sign序列的计数,并在达到5时自动重置。
为了更好地理解每一步的作用,我们可以将中间结果作为新列添加到DataFrame中进行观察:
df_detailed = df.assign(
consecutive_group=df['sign'].ne(df['sign'].shift()).cumsum(),
raw_cumcount=df.groupby(df['sign'].ne(df['sign'].shift()).cumsum()).cumcount(),
final_count=df.groupby(df['sign'].ne(df['sign'].shift()).cumsum()).cumcount() % 5 + 1
)
print("\n详细步骤解析的DataFrame:")
print(df_detailed)输出结果:
详细步骤解析的DataFrame:
price sign consecutive_group raw_cumcount final_count
0 13 1 1 0 1
1 12 1 1 1 2
2 11 -1 2 0 1
3 12 -1 2 1 2
4 13 1 3 0 1
5 14 1 3 1 2
6 14 1 3 2 3
7 14 1 3 3 4
8 14 1 3 4 5
9 14 1 3 5 1
10 14 1 3 6 2本教程详细展示了如何利用Pandas强大的矢量化能力,通过组合shift()、ne()、cumsum()、groupby()和cumcount()方法,高效地实现对DataFrame中连续相同值序列的计数,并引入了灵活的计数重置机制。掌握这种模式对于进行高效的数据清洗、特征工程和模式识别至关重要。通过理解每一步操作的原理,您可以将此方法应用于更复杂的序列分析任务中。
以上就是Pandas矢量化操作:实现连续序列计数与阈值重置的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号