Pandas Сравнение двух разных датафреймов с промежуточной группировкой
Есть два датафрейма:
| day | code | name | qty |
|---|---|---|---|
| 1 | 001 | qwe | 1 |
| 1 | 001 | ewq | 2 |
| 2 | 002 | qaz | 5 |
| day | code | qty |
|---|---|---|
| 1 | 001 | 3 |
| 4 | 002 | 5 |
если данные в колонках day и code совпадают в обеих таблицах, то проверяем на совпадения колонку qty, если количество совпадает, то создаем третий датафрейм, куда переносим совпадающие колонки из первого. вид третьего датафрейма:
| day | code | name | qty |
|---|---|---|---|
| 1 | 001 | qwe | 1 |
| 1 | 001 | ewq | 2 |
я пытался решить через GroupBy, сгруппировав первый датафрейм, но не понимаю, как после сравнения и совпадения вернуть колонки к изначальному виду с сохранением количества и имяни.
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
- выносите в индекс во втором датафрейме день и код
- группируете первый датафрейм по дню и коду и суммируете количество
- делаете merge датафреймов
- оставляете записи, где количества совпадают
- выносите в индекс в первом датафрейме день и код
- делаете мерж того что получилось перед этим с этим первым фреймом
- выкидываете лишние колонки
Может можно проще, но навскидку так.
Автор решения: strawdog
→ Ссылка
не совсем понял, зачем вам группировка.
попробуйте сделать так, например:
df1 = df1.set_index(["day", "code"])
df2 = df2.set_index(["day", "code"])
res = df1.join(df2, how='inner', rsuffix="r").iloc[:,:-1].reset_index()
res:
day code name qty
0 1 001 qwe 1
1 1 001 ewq 2