Как объединить 4 DataFrame в один?

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

df1 = pd.DataFrame({'type' : [3200, 3210, 3800, 4000, 4001]})
df2 = pd.DataFrame({'mcc_code' : [742, 743, 744, 745, 746], 'mcc_desc' : ['a', 'b', 'c', 'd', 'f']})
df3 = pd.DataFrame({'datetime' : [10, 11, 12, 13, 14], 'amount' : [1000, 1200, 4000, 5300, 1250]})
df4 = pd.DataFrame({'id' : [10928546, 10928547, 10928548, 10928549, 10928550], 'gender' : [0, 1, 1, 0, 1]})

Необходимо соединить df3 c остальными df. При этом необходимо соединить df4 с помощью left join, а с оставшимися df - через inner (реальные данные содержат более 100 000 рядов).

pd.concat([df3, df4], axis=0, join = 'left').concat([df3, df1, df2], axis=0, join = 'inner')

выдаёт ValueError...

Подскажите, пожалуйста, эффективный способ решения данной задачи?


Ответы (1 шт):

Автор решения: MaxU

Судя по примеру данных из вопроса, единственный вариант объединения - это по индексу, т.к. у вас нет столбца, который бы существовал во всех фреймах и по которому их можно было бы объединить.

Поэтому решение будет очень простым:

res = pd.concat([df1, df2, df3, df4], axis=1)

Результат:

In [14]: res
Out[14]:
   type  mcc_code mcc_desc  datetime  amount        id  gender
0  3200       742        a        10    1000  10928546       0
1  3210       743        b        11    1200  10928547       1
2  3800       744        c        12    4000  10928548       1
3  4000       745        d        13    5300  10928549       0
4  4001       746        f        14    1250  10928550       1
→ Ссылка