带有滚动窗口的 Pandas Dataframe 枢轴

Posted

技术标签:

【中文标题】带有滚动窗口的 Pandas Dataframe 枢轴【英文标题】:Pandas Dataframe pivot with rolling window 【发布时间】:2020-08-14 02:13:52 【问题描述】:

我正在尝试使用PythonPandas(第一个计时器)为一些时间序列建模准备数据。我的DataFrame 看起来像这样:

df = pd.DataFrame(
    'time': [0, 1, 2, 3, 4], 
    'colA': ['a', 'b', 'c', 'd', 'e'], 
    'colB': ['v', 'w', 'x', 'y', 'z'], 
    'value' : [10, 11, 12, 13, 14]
)

#       time  colA  colB  value
# 0     0     a     v     10
# 1     1     b     w     11
# 2     2     c     x     12
# 3     3     d     y     13
# 4     4     e     z     14

是否有可以将其转换为以下格式的函数组合?

# colA-2  colA-1  colA    colB-2  colB-1  colB  value
# _       _       a       _       _       v     10
# _       a       b       _       v       w     11
# a       b       c       v       w       x     12
# b       c       d       w       x       y     13
# c       d       e       x       y       z     14

我对 Python/Pandas 非常陌生,我没有任何具体的代码/结果可以让我接近我需要的...

【问题讨论】:

【参考方案1】:

我会使用pd.concat

pd.concat([
    df[['colA', 'colB']].shift(i).add_suffix(f'-i')
    for i in range(1, 3)], axis=1
).fillna('-').join(df)

  colA-1 colB-1 colA-2 colB-2  time colA colB  value
0      -      -      -      -     0    a    v     10
1      a      v      -      -     1    b    w     11
2      b      w      a      v     2    c    x     12
3      c      x      b      w     3    d    y     13
4      d      y      c      x     4    e    z     14

【讨论】:

【参考方案2】:

你可以使用移位功能:

df['colA-2'] =df['colA'].shift(2, fill_value='-' )
df['colA-1'] =df['colA'].shift(1,fill_value='-')
... 

【讨论】:

以上是关于带有滚动窗口的 Pandas Dataframe 枢轴的主要内容,如果未能解决你的问题,请参考以下文章

pandas使用rolling函数计算dataframe指定数据列特定窗口下的滚动均值(rolling mean)自定义指定滚动窗口的大小(window size)

pandas使用rolling函数计算dataframe指定数据列特定窗口下的滚动最小值(rolling minimum)自定义指定滚动窗口的大小(window size)

pandas使用rolling函数计算dataframe指定数据列特定窗口下的滚动加和值(rolling sum)自定义指定滚动窗口的大小(window size)

Pandas 按天滚动时间窗口而不是单个行

pandas使用rolling函数计算dataframe指定数据列特定窗口下的滚动最大值(rolling maximum)自定义指定滚动窗口的大小(window size)

pandas使用rolling函数计算dataframe指定数据列特定窗口下的滚动中位数(rolling median)自定义指定滚动窗口的大小(window size)