Pandas Поворот датафрейма с подвижным окном - PullRequest
4 голосов
/ 29 апреля 2020

Я пытаюсь подготовить данные для моделирования временных рядов с помощью Python Pandas (первый таймер). Мой 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 и у меня нет никакого конкретного кода / результатов, которые бы даже приблизили меня к тому, что мне нужно ...

Ответы [ 2 ]

2 голосов
/ 29 апреля 2020

Я бы использовал 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 голосов
/ 29 апреля 2020

Вы можете использовать функцию сдвига:

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