Слияние/обновление нескольких столбцов и нескольких назначений PandasPython

Программы на Python
Ответить
Anonymous
 Слияние/обновление нескольких столбцов и нескольких назначений Pandas

Сообщение Anonymous »

Я хочу обновить базу DataFrame pandas данными из обновления DataFrame. Это относится к нескольким строкам базового DataFrame (т. е. функции слияния не уникальны, поэтому их нельзя использовать в качестве индекса), и я не могу использовать методы сопоставления индексов pd.join() или pd.merge(), потому что я хочу перезаписать столбцы. Использование df.loc[] и df.update() не работает, поскольку использование ['id','date'] в качестве индекса базы не является уникальным.
Предыдущие решения заканчивались нулевыми значениями или использованием списков для создания логических списков для индексации. Должен быть лучший способ!
Обратите внимание, я часто делаю это, когда база имеет до 20 миллионов строк, а обновление - до 5 тысяч строк, и часто сопоставление происходит по 3-5 столбцам. Использование списков может быть медленным, если я не буду выполнять кропотливую работу по составлению нескольких отдельных списков для каждого условного столбца
base = pd.DataFrame({
'grp':['A','A','B','B','A','B','C'],
'id': ['a','b','a','b','a','a','c'],
'date': ['2025-01-01']*4+['2025-01-02']*3,
'cat1': [0]*7,
'cat2': [0]*7,
})
base:
grp id date cat1 cat2
0 A a 2025-01-01 0 0
1 A b 2025-01-01 0 0
2 B a 2025-01-01 0 0
3 B b 2025-01-01 0 0
4 A a 2025-01-02 0 0
5 B a 2025-01-02 0 0
6 C c 2025-01-02 0 0

update = pd.DataFrame({
'date': ['2025-01-01', '2025-01-01', '2025-01-02', '2025-01-02'],
'id': ['a', 'b', 'a', 'b'],
'cat1': [1, 0, 1, 0],
'cat2': [0, 1, 1, 1],
})
update:
date id cat1 cat2
0 2025-01-01 a 1 0
1 2025-01-01 b 0 1
2 2025-01-02 a 1 1
3 2025-01-02 b 0 1

desired_output = pd.DataFrame({
'grp':['A','A','B','B','A','B','C'],
'id': ['a','b','a','b','a','a','c'],
'date': ['2025-01-01']*4+['2025-01-02']*3,
'cat1': [1,0,1,0,1,1,0],
'cat2': [0,1,0,1,1,1,0],
})
desired_output:
grp id date cat1 cat2
0 A a 2025-01-01 1 0
1 A b 2025-01-01 0 1
2 B a 2025-01-01 1 0
3 B b 2025-01-01 0 1
4 A a 2025-01-02 1 1
5 B a 2025-01-02 1 1
6 C c 2025-01-02 0 0


Подробнее здесь: https://stackoverflow.com/questions/796 ... rge-update
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»