DataPrame Python: создание нового столбца со значением по умолчанию, когда значение по умолчанию является итеративным - PullRequest
0 голосов
/ 05 октября 2018

У меня есть pandas dataframe, как показано ниже:

In  [1]: import pandas as pd
In  [2]: df = pd.DataFrame([[1,2],[3,4],[5,6]], columns=['a','b'])
In  [3]: print df
Out [3]: 
   a  b
0  1  2
1  3  4
2  5  6

Теперь я хочу добавить новый столбец 'c' со значением по умолчанию в качестве словаря.Полученный фрейм данных должен выглядеть следующим образом:

   a  b             c
0  1  2  {1: 2, 3: 4}
1  3  4  {1: 2, 3: 4}
2  5  6  {1: 2, 3: 4}

Я пробовал следующее:

df.at[:, 'c'] = {1: 2, 3: 4}
ValueError: Length of values does not match length of index

и

df['c'] = {1: 2, 3: 4}
ValueError: Must have equal len keys and value when setting with an iterable

Этот работает для меня

df['c'] = df.apply(lambda x: {1:2, 3:4}, axis=1)

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

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Возможно, но не рекомендуется хранить диктанты в столбце DataFrame, поскольку нельзя использовать все векторизованные функции панд:

df['c'] = [{1: 2, 3: 4} for x in np.arange(len(df))]
print (df)
   a  b             c
0  1  2  {1: 2, 3: 4}
1  3  4  {1: 2, 3: 4}
2  5  6  {1: 2, 3: 4}
0 голосов
/ 05 октября 2018

У вас есть три строки в вашем DF и только два элемента в вашем dict, выполните:

c = {0:1,1:1,2:2}
df['c'] = c

Вывод:

 a  b  c
0  1  2  0
1  3  4  1
2  5  6  2

Чтобы один и тот же словарь повторялся на вашем фрейме данных, вынужно создать список таких диктов

c = {1:2,3:4}
c = [c]*3
df['c'] = c

Вывод

 a  b             c
0  1  2  {1: 2, 3: 4}
1  3  4  {1: 2, 3: 4}
2  5  6  {1: 2, 3: 4}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...