Добавить значения списка в столбцы DataFrame для панд на основе соответствующего значения в строке DataFrame

1

У меня есть pandas DataFrame, который выглядит так:

            0
2013-09-20  0
2013-09-21  1
2013-09-22  2
2013-09-23  3
2013-09-24  4
2013-09-25  5
2013-09-26  6
2013-09-27  7
2013-09-28  8
2013-09-29  9
...

и список списков в следующей структуре:

[[0, 125.77, 126.28, 125.77, 126.16],
 [3, 126.06, 126.31, 125.84, 125.86],
 [4, 126.04, 126.93, 126.0, 126.93],
 [5, 126.51, 126.51, 126.0, 126.18],
 [6, 127.63, 128.04, 127.57, 128.04],
 [7, 127.58, 127.8, 126.42, 126.94],
 [10, 126.59, 126.77, 125.14, 125.51],
 [11, 125.38, 125.88, 125.38, 125.88],
 [12, 124.3, 124.3, 123.3, 123.81],
 [13, 123.38, 123.55, 123.09, 123.23],
 [14, 122.71, 122.85, 122.5, 122.79],
 [17, 121.19, 121.74, 121.0, 121.74],
 [18, 122.09, 122.09, 121.12, 121.13],
 [19, 123.31, 123.88, 123.17, 123.58],
 [20, 124.57, 125.83, 124.57, 125.83],
 ...

Я хотел бы добавить последние четыре значения каждого списка в DataFrame, где число столбцов DataFrame "0" равно первому значению соответствующего списка в коллекции списков.

Например:

            0 1      2      3      4
2013-09-20  0 125.77 126.28 125.77 126.16
2013-09-21  1 nan
2013-09-22  2 nan
2013-09-23  3 126.06 126.31 125.84 125.86
...
  • 0
    Рекомендации по переименованию заголовка очень приветствуются.
Теги:
pandas

1 ответ

1
Лучший ответ

Превратите свой список в кадр данных и используйте merge. В этом примере я назвал ваш список именем переменной mylist:

>>> df.merge(pd.DataFrame(mylist), how='left')
   0       1       2       3       4
0  0  125.77  126.28  125.77  126.16
1  1     NaN     NaN     NaN     NaN
2  2     NaN     NaN     NaN     NaN
3  3  126.06  126.31  125.84  125.86
4  4  126.04  126.93  126.00  126.93
5  5  126.51  126.51  126.00  126.18
6  6  127.63  128.04  127.57  128.04
7  7  127.58  127.80  126.42  126.94
8  8     NaN     NaN     NaN     NaN
9  9     NaN     NaN     NaN     NaN

Если вам нужно указать имена столбцов для объединения, используйте аргументы left_on=whatever_column_name, right_on=0.

df.merge(pd.DataFrame(mylist), left_on=0, right_on=0,how='left')

В вашем случае имя столбца вашего исходного df равно 0, поэтому нет необходимости.

  • 0
    Это работает .. спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню