как назначить полный список каждой строке кадра данных панд - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть датафрейм и список

df = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6]})
mylist= [10,20,30,40,50]

Я хотел бы иметь список в качестве элемента в каждой строке кадра данных. Если мне нравится здесь ,

df['C'] = mylist

Pandas пытается транслировать одно значение в строке, поэтому я получаю сообщение об ошибке Length of values does not match length of index.

   A  B   C
0  1  4  [10,20,40,50]
1  2  5  [10,20,40,50]
2  3  6  [10,20,40,50]

Ответы [ 4 ]

0 голосов
/ 02 ноября 2018

Вот еще одно решение. Он использует lambda и работает "Pythonically". Я думаю, что это легче читать.

import pandas as pd
df = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6]})
mylist= [10,20,30,40,50]
df['combined'] = df.apply(lambda x: mylist, axis=1)
df

enter image description here

0 голосов
/ 02 ноября 2018

Сначала я думаю, что работать с list s в пандах - это не хорошая идея .

Но это возможно при понимании списка:

df['C'] = [mylist for i in df.index]
#another solution
#df['C'] = pd.Series([mylist] * len(df))

print (df)

   A  B                     C
0  1  4  [10, 20, 30, 40, 50]
1  2  5  [10, 20, 30, 40, 50]
2  3  6  [10, 20, 30, 40, 50]
0 голосов
/ 02 ноября 2018

Одна альтернатива, использующая np.tile:

df['C'] = np.tile(mylist, (len(df),1)).tolist()

print (df)

   A  B                     C
0  1  4  [10, 20, 30, 40, 50]
1  2  5  [10, 20, 30, 40, 50]
2  3  6  [10, 20, 30, 40, 50]

1007 *

0 голосов
/ 02 ноября 2018

Просто, чтобы завершить мой предыдущий ответ df.assign, заимствованным списком из @ jezrael

>>> df
   A  B
0  1  4
1  2  5
2  3  6

>>> df.assign(C =  [mylist for i in df.index])
   A  B                     C
0  1  4  [10, 20, 30, 40, 50]
1  2  5  [10, 20, 30, 40, 50]
2  3  6  [10, 20, 30, 40, 50]

ИЛИ для постоянного добавления в DataFrame

df = df.assign(C =  [mylist for i in df.index])

Еще один способ сделать это с df.insert

, так как мы указываем порядок столбцов, следовательно, можем использовать вставку здесь, вставив в индекс 2 (так должен быть третий столбец в dataframe)

>>> df.insert(2, 'C', '[10, 20, 30, 40, 50]') # directly assigning the list
>>> df
   A  B                     C
0  1  4  [10, 20, 30, 40, 50]
1  2  5  [10, 20, 30, 40, 50]
2  3  6  [10, 20, 30, 40, 50]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...