Xin chào, tôi đã đào sâu vào concat, tham gia và hợp nhất các phương pháp cho gấu trúc và dường như không thể tìm thấy những gì tôi muốn.
Giả sử tôi có hai datafram
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 B
Bây giờ tôi muốn tạo một khung dữ liệu mới với các cột được hợp nhất, tôi nghĩ nó dễ giải thích nhất nếu tôi tạo một chỉ mục đa cho cách tôi muốn các cột
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]])
Bây giờ nếu tôi tạo một khung dữ liệu trống với chỉ mục đa này cho các cột
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 - - - - - -
Câu hỏi của tôi là, tôi sử dụng hợp nhất, concat hoặc tham gia nào để có được điều đó? Tôi đã thử nhiều thứ cho concat ... bên trong, bên ngoài, v.v. Tôi dường như không thể tìm thấy những gì tôi muốn. Điều duy nhất tôi có thể nghĩ đến là tạo ra khung dữ liệu trống và sau đó điền lại.
Chỉnh sửa: Sau khi thử phản ứng của Jezrael, nó gần nhưng không chính xác. Những gì tôi muốn giống như các cột sắp xếp lồng nhau? Ví dụ
empty_df['Col 1']
>>> empty_df['Col 1']
A B
0 - -
1 - -
2 - -
3 - -
4 - -
Hoặc là
>>> empty_df['Col 1']['A']
0 -
1 -
2 -
3 -
4 -
Name: A, dtype: object
Vì vậy, đây là một giải pháp tôi đã đưa ra nhưng nó không lặp lại qua các cột.
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