df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
 'B': ['B0', 'B1', 'B2', 'B3'],
 'C': ['C0', 'C1', 'C2', 'C3'],
 'D': ['D0', 'D1', 'D2', 'D3']},
index=[0, 1, 2, 3])
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
 'B': ['B4', 'B5', 'B6', 'B7'],
 'C': ['C4', 'C5', 'C6', 'C7'],
 'D': ['D4', 'D5', 'D6', 'D7']},
index=[4, 5, 6, 7])
df22 = pd.DataFrame({'A2': ['A4', 'A5', 'A6', 'A7'],
 'B2': ['B4', 'B5', 'B6', 'B7'],
 'C2': ['C4', 'C5', 'C6', 'C7'],
 'D2': ['D4', 'D5', 'D6', 'D7']},
index=[4, 5, 6, 7])
frames = [df1, df2, df22]
result = pd.concat(frames,sort=False)
result

As we see, index 4,5,6,7 are repeated, and NAN is added. How to merge meaningfully .. ?
NaN at A2 ,B2 ,C2, D2, at index 0,1,2,3 is acceptable
But Index 4,5,6,7 should not repeat and should not contain NaN
Do you want something like this?  You can pd.concat vertically, the first two dataframes, the join that dataframe to df22 using the dataframe indexes.
 pd.concat([df1,df2]).join(df22)
Output:
    A   B   C   D   A2   B2   C2   D2
0  A0  B0  C0  D0  NaN  NaN  NaN  NaN
1  A1  B1  C1  D1  NaN  NaN  NaN  NaN
2  A2  B2  C2  D2  NaN  NaN  NaN  NaN
3  A3  B3  C3  D3  NaN  NaN  NaN  NaN
4  A4  B4  C4  D4   A4   B4   C4   D4
5  A5  B5  C5  D5   A5   B5   C5   D5
6  A6  B6  C6  D6   A6   B6   C6   D6
7  A7  B7  C7  D7   A7   B7   C7   D7
Another way is to use combine_first:
from functools import reduce
reduce(lambda x,y: x.combine_first(y), [df1,df2,df22])
or
df1.combine_first(df2).combine_first(df22)
Output:
    A   A2   B   B2   C   C2   D   D2
0  A0  NaN  B0  NaN  C0  NaN  D0  NaN
1  A1  NaN  B1  NaN  C1  NaN  D1  NaN
2  A2  NaN  B2  NaN  C2  NaN  D2  NaN
3  A3  NaN  B3  NaN  C3  NaN  D3  NaN
4  A4   A4  B4   B4  C4   C4  D4   D4
5  A5   A5  B5   B5  C5   C5  D5   D5
6  A6   A6  B6   B6  C6   C6  D6   D6
7  A7   A7  B7   B7  C7   C7  D7   D7
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With