Я хочу обновить базу 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
Слияние/обновление нескольких столбцов и нескольких назначений Pandas ⇐ Python
Программы на Python
1767027299
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79653054/pandas-multi-column-multi-assignment-merge-update[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия