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

如何为Pandas DataFrame创建含Trend列前序值列表的新列

给Pandas DataFrame新增前序Trend值列表列

需求说明

为已创建的df新增一列ArrayToBeMade,该列每个元素是包含当前行之前3个Trend列值的列表,不足3个前序值时用NaN补全列表长度。

解决方案代码

import pandas as pd
import numpy as np

# 原DataFrame创建代码
ds = {'Trend' : [1,1,1,1,1,
                 2,2,2,2,2,
                 3,3,3,3,3,
                 4,4,4,4,4,
                 5,5,5,5,5],
      'Cycle' : [
          14,88,50,119,107,
          32,111,41,88,38,
          37,72,79,98,69,
          62,38,86,26,30,
          52,91,122,90,127
          ]
      }

df = pd.DataFrame(data=ds)

# 生成前序Trend列并合并为列表
# 获取前1、前2、前3行的Trend值
df['prev1'] = df['Trend'].shift(1)
df['prev2'] = df['Trend'].shift(2)
df['prev3'] = df['Trend'].shift(3)

# 将三列按行转为列表,作为新列
df['ArrayToBeMade'] = df[['prev3', 'prev2', 'prev1']].values.tolist()

# 删除临时生成的辅助列
df = df.drop(columns=['prev1', 'prev2', 'prev3'])

结果示例

处理后的DataFrame前6行如下:

Trend  Cycle ArrayToBeMade
0       1     14  [NaN, NaN, NaN]
1       1     88  [NaN, NaN, 1.0]
2       1     50  [NaN, 1.0, 1.0]
3       1    119  [1.0, 1.0, 1.0]
4       1    107  [1.0, 1.0, 1.0]
5       2     32  [1.0, 1.0, 1.0]

自定义调整

  • 如果希望不足3个前序值时用其他值(比如0)填充,可在转列表前补全:
    df['ArrayToBeMade'] = df[['prev3', 'prev2', 'prev1']].fillna(0).values.tolist()
    
  • 如果需要列表内元素顺序为最近的前序值在前,调整列顺序即可:
    df['ArrayToBeMade'] = df[['prev1', 'prev2', 'prev3']].values.tolist()
    

内容的提问来源于stack exchange,提问作者Giampaolo Levorato

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:50:30