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
相关产品推荐
相关产品推荐

