Добавить список констант в столбец pandas - PullRequest
3 голосов
/ 06 августа 2020

Это должно быть просто, но по какой-то причине я не могу этого понять:

Предполагая, что у меня есть df:

df=pd.DataFrame({'a':[1,2,3],'b':[4,5,6]})

Все, что я хочу, это добавить новый столбец , c, с постоянным списком (например: [7,8,9,10]).

Когда я пытаюсь:

df['c']=[7,8,9,10]

, я получаю:

ValueError: Length of values does not match length of index

I пытался также поиграть с loc, at, ix - но не смог понять.

Уродливое решение, которое я нашел, - это сделать что-то вроде:

df['c'] = df['b'].apply(lambda x: [7,8,9,10])

Но должен быть более элегантный способ сделать это.

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

2 голосов
/ 06 августа 2020

Более простой способ:

df['c'] =  [[7,8,9,10]]*len(df)

результат:

   a  b              c
0  1  4  [7, 8, 9, 10]
1  2  5  [7, 8, 9, 10]
2  3  6  [7, 8, 9, 10]

ОБНОВЛЕНИЕ:

Чтобы избежать проблемы с неглубоким копированием списков в каждой строке (как @YOBEN_S описано), используйте:

df['c'] = df.apply(lambda x: [7,8,9,10], axis = 1)

Теперь можно, например, изменить только первый элемент в столбце c первой строки, вызвав:

df.loc[0,'c'][0]='test'
   a  b                 c
0  1  4  [test, 8, 9, 10]
1  2  5     [7, 8, 9, 10]
2  3  6     [7, 8, 9, 10]
0 голосов
/ 06 августа 2020

Это добавит список констант в df

#df['c']=pd.Series([[7,8,9,10]]*len(df))
df=df.assign(c=pd.Series([[7,8,9,10]]*len(df)))



  a  b              c
0  1  4  [7, 8, 9, 10]
1  2  5  [7, 8, 9, 10]
2  3  6  [7, 8, 9, 10]

Это добавит столбец в df, используя его индекс

df['c']=pd.Series([7,8,9,10])
   a  b  c
0  1  4  7
1  2  5  8
2  3  6  9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...