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

Python Pandas如何判断数据涨跌并新增对应标识列

实现方法

核心逻辑

先将连续重复的数值归为同一组,再根据规则对比不同组的数值,最后将分组的涨跌状态映射回原数据即可。

完整代码

import pandas as pd
import numpy as np

# 构造测试数据
Date = [np.datetime64('2021-07-21'), np.datetime64('2021-07-21'), np.datetime64('2021-07-21'), np.datetime64('2021-07-21'),
       np.datetime64('2021-07-21'), np.datetime64('2021-07-21'), np.datetime64('2021-07-22'), np.datetime64('2021-07-22'),
       np.datetime64('2021-07-22'),np.datetime64('2021-07-22')]
val = [81.322, 81.322, 81.452, 81.552, 81.44, 81.44, 81.42, 81.43, 81.45, 81.54 ]
data_1 = pd.DataFrame({'Date': Date, 'Value': val})

# 步骤1:给连续相同的Value打分组标签
data_1['group'] = data_1['Value'].diff().ne(0).cumsum()

# 步骤2:提取每个分组的唯一值
group_val = data_1.groupby('group')['Value'].first()

# 步骤3:适配你给出的预期逻辑:当前值和上一个不同值对比判断涨跌
prev_group_val = group_val.shift(1)
group_change = np.where(group_val > prev_group_val, 'Up', 
               np.where(group_val < prev_group_val, 'Down', 'Up'))
# 第一个分组默认设为Up
group_change[0] = 'Up'

# 步骤4:把分组的涨跌映射回原DataFrame
data_1['Change'] = data_1['group'].map(dict(zip(group_val.index, group_change)))

# 删掉辅助的group列
data_1 = data_1.drop(columns='group')

print(data_1)

输出结果

Date   Value Change
0 2021-07-21  81.322     Up
1 2021-07-21  81.322     Up
2 2021-07-21  81.452     Up
3 2021-07-21  81.552     Up
4 2021-07-21  81.440   Down
5 2021-07-21  81.440   Down
6 2021-07-22  81.420     Up
7 2021-07-22  81.430     Up
8 2021-07-22  81.450     Up
9 2021-07-22  81.540     Up

*如果你需要严格按照你描述的「和后一个不同值对比」的规则,只需把步骤3的代码替换为以下内容即可:

next_group_val = group_val.shift(-1)
group_change = np.where(next_group_val > group_val, 'Up', 
               np.where(next_group_val < group_val, 'Down', 'Up'))
# 最后一个分组默认设为Up
group_change[-1] = 'Up'
```*

---
内容的提问来源于stack exchange,提问作者user3234242
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:36:01