Панды устанавливают значение столбца на основе значения других столбцов с помощью элемента списка путем итерации - PullRequest
0 голосов
/ 23 сентября 2018

Я пытаюсь установить значение столбца панд на основе другого значения столбцов.Новое значение должно быть установлено путем перебора списка, который имеет ту же длину, что и уникальные значения col1

Пример:

d = {'col1': [1, 2,2,2,3,3,4], 'col2': [1,1,1,1,1,1,1]}
df = pd.DataFrame(data=d)
items_to_add=[5,2,11,9]
#list has length of unique values in `column1`

Теперь я хочу добавить, например, 5в column2, если column1 равно 1 и 2 для всех column2 строк, где column1 равно 2 .... Так что я должен получить:

col1    col2
1       5
2       2
2       2
2       2
3       11
3       11
4       9

Этот код вызывает синтаксическую ошибку, ноя не знаю почему

items_to_add=[5,2,11,9]
for i in range(len(items_to_add)):
    df['col2'][df.col1[i]] = items_to_add[i]

Что я делаю не так?Как я могу это исправить?

Ответы [ 3 ]

0 голосов
/ 23 сентября 2018

Вы можете просто заменить значения в col1, создав словарь, например

di =  dict(zip(df['col1'].unique(), items_to_add))
# {1: 5, 2: 2, 3: 11, 4: 9}
df['col3'] = df['col1'].map(di)

   col1  col2  col3
0     1     1     5
1     2     1     2
2     2     1     2
3     2     1     2
4     3     1    11
5     3     1    11
6     4     1     9
0 голосов
/ 23 сентября 2018

Я думаю, вам нужно удалить дубликаты, а затем карту,

df['col1'].map(dict(zip(df['col1'].drop_duplicates(),items_to_add)))
#out[]
0     5
1     2
2     2
3     2
4    11
5    11
6     9
0 голосов
/ 23 сентября 2018

Это то, что вы делаете

df['col2'] = df['col1'].apply(lambda x: items_to_add[x-1])

Этим вы создаете новый столбец col2, где для каждого x в df[col1] вы выбираете (x-1)th индексированное значение items_to_add.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...