Вот иллюстрация того, что @QuangHoang предложил в их комментарии :
import pandas as pd
df1 = pd.DataFrame(data=np.random.randint(0, 100, (2, 5)),
columns=list('ABCDE'))
df2 = pd.DataFrame(data=np.random.randint(0, 100, (2, 5)),
columns=list('GHABC'))
dfs = [df1, df2]
for source_index, df in enumerate(dfs):
df['data_source'] = source_index
result = pd.concat(dfs)
print(result)
даст всем вашим фреймам данных, соединенным вертикально:
A B C D E G H data_source
0 66 52 16 73.0 59.0 NaN NaN 0
1 73 64 59 31.0 13.0 NaN NaN 0
0 72 79 45 NaN NaN 30.0 0.0 1
1 45 52 40 NaN NaN 2.0 80.0 1
Для доступакаждую группу в цикле вы можете сделать:
for source_index, df in result.groupby('data_source'):
print(df.dropna(axis=1))
A B C D E data_source
0 66 52 16 73.0 59.0 0
1 73 64 59 31.0 13.0 0
A B C G H data_source
0 72 79 45 30.0 0.0 1
1 45 52 40 2.0 80.0 1
или по индексу источника:
gb = result.groupby('data_source')
source_index = 0
first_group = gb.get_group(source_index).dropna(axis=1)
print(first_group)
A B C D E data_source
0 66 52 16 73.0 59.0 0
1 73 64 59 31.0 13.0 0