Salut, j'ai fouillé dans les méthodes de concaténation, de jointure et de fusion pour les pandas et je n'arrive pas à trouver ce que je veux.
Supposons que j'ai deux trames de données
A = pd.DataFrame("A",index=[0,1,2,3,4],columns=['Col 1','Col 2','Col 3'])
B = pd.DataFrame("B",index=[0,1,2,3,4],columns=['Col 1','Col 2','Col 3'])
>>> A
  Col 1 Col 2 Col 3
0     A     A     A
1     A     A     A
2     A     A     A
3     A     A     A
4     A     A     A
>>> B
  Col 1 Col 2 Col 3
0     B     B     B
1     B     B     B
2     B     B     B
3     B     B     B
4     B     B     BMaintenant, je veux faire un nouveau dataframe avec les colonnes fusionnées, je pense que c'est plus facile à expliquer si je fais un multi index pour la façon dont je veux les colonnes
index = pd.MultiIndex.from_product([A.columns.values,['A','B']])
>>> index
MultiIndex(levels=[['Col 1', 'Col 2', 'Col 3'], ['A', 'B']],
           labels=[[0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1]])Maintenant, si je fais un dataframe vide avec ce multi index pour les colonnes
empty_df = pd.DataFrame('-',index=A.index,columns=index)
>>> empty_df
  Col 1    Col 2    Col 3
      A  B     A  B     A  B
0     -  -     -  -     -  -
1     -  -     -  -     -  -
2     -  -     -  -     -  -
3     -  -     -  -     -  -
4     -  -     -  -     -  -Ma question est la suivante: quelle fusion, concaténation ou adhésion dois-je utiliser pour l'obtenir? J'ai essayé plusieurs choses pour la concaténation ... intérieure, extérieure, etc. Je n'arrive pas à trouver ce que je veux. La seule chose à laquelle je peux penser est de créer la trame de données vide puis de la remplir à nouveau.
Edit: Après avoir essayé la réponse de Jezrael, elle est proche mais pas exactement. Ce que je veux, c'est comme des colonnes imbriquées? Par exemple
empty_df['Col 1']
>>> empty_df['Col 1']
   A  B
0  -  -
1  -  -
2  -  -
3  -  -
4  -  -Ou
>>> empty_df['Col 1']['A']
0    -
1    -
2    -
3    -
4    -
Name: A, dtype: objectC'est donc une solution que j'ai trouvée, mais son itération sur les colonnes.
row_idx = A.index.union(B.index)
col_idx = pd.MultiIndex.from_product([A.columns.values,['A','B']])
new_df = pd.DataFrame('-',index=row_idx,columns=col_idx)
for column in A.columns:
   new_df.loc[:,(column,'A')] = A[column]
   new_df.loc[:,(column,'B')] = B[column]
>>> new_df
  Col 1    Col 2    Col 3
      A  B     A  B     A  B
0     A  B     A  B     A  B
1     A  B     A  B     A  B
2     A  B     A  B     A  B
3     A  B     A  B     A  B
4     A  B     A  B     A  B
>>> new_df['Col 1']
   A  B
0  A  B
1  A  B
2  A  B
3  A  B
4  A  B
>>> new_df['Col 1']['A']
0    A
1    A
2    A
3    A
4    A
Name: A, dtype: object