안녕하세요, 팬더를위한 concat, join 및 merge 메소드를 파고 있었고 원하는 것을 찾지 못하는 것 같습니다.
두 개의 데이터 프레임이 있다고 가정 해 봅시다.
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
이제 열을 병합하여 새 데이터 프레임을 만들고 싶습니다. 열을 원하는 방법에 대한 다중 인덱스를 만드는지 설명하는 것이 가장 쉽다고 생각합니다.
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]])
이제 열에 대한이 다중 색인으로 빈 데이터 프레임을 만들면
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 - - - - - -
내 질문은, 그것을 얻기 위해 어떤 병합, 연결 또는 결합을 사용합니까? 나는 내부, 외부 등 여러 가지를 시도했다. 내가 원하는 것을 찾을 수없는 것 같다. 내가 생각할 수있는 유일한 것은 빈 데이터 프레임을 만든 다음 다시 채우는 것입니다.
편집 : Jezrael의 응답을 시도한 후에는 가깝지만 정확하지는 않습니다. 내가 원하는 것은 정렬 된 열과 같습니다. 예를 들어
empty_df['Col 1']
>>> empty_df['Col 1']
A B
0 - -
1 - -
2 - -
3 - -
4 - -
또는
>>> empty_df['Col 1']['A']
0 -
1 -
2 -
3 -
4 -
Name: A, dtype: object
그래서 이것은 내가 생각해 냈지만 열을 반복하는 해결책입니다.
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