Панды: Обновление нескольких столбцов и строк на основе значения отдельного столбца

1

Я пытаюсь создать код, который как можно быстрее может обновлять большое количество значений панд одновременно на основе значений столбца идентификатора. Код, который я использую atm, вставляет несколько строк одновременно на основе ID_column, но не может вставлять несколько столбцов + строк одновременно.

Приведенный ниже код является упрощенным примером, который обновляет 2 столбца (значение1 и значение2) на основе значения идентификатора имени столбца.

id_list = [24,26,28] 
value1_list  =[100,200,300]
value2_list  =[125,175,165]

df.loc[df['id'].isin(id_list), 'value1'] = value1_list 
df.loc[df['id'].isin(id_list), 'value2'] = value2_list 

Код, который я бы в идеале использовал, работал бы примерно так:

df.loc[df['id'].isin(id_list), ['value1','value2']] = [value1_list,value2_list]

Значение как столбца value1, так и столбца value2 будет обновлено одновременно. Это выполнимо?

  • 0
    что должно value1 быть если не в value1_list? то же самое для value2
Теги:
pandas

2 ответа

0

Вы можете создать один массив NumPy через np.vstack а затем назначить его нескольким столбцам:

import numpy as np

mask = df['id'].isin(id_list)
value_array = np.vstack((value1_list, value2_list)).T
df.loc[mask, ['value1', 'value2']] = value_array

print(df)
#    id  value1  value2
# 0  24     100     125
# 1  26     200     175
# 2  28     300     165
# 3  30       4       8

Кроме того, вы можете zip ваши входные списки:

df.loc[mask, ['value1', 'value2']] = list(zip(*(value1_list,value2_list)))
0

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

mask = df['id'].isin(id_list)

dc = {'value1': value1_list, 'value2': value2_list}
for i, j in dc.items():
    df.loc[mask, i] = j

Ещё вопросы

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