2017-05-08 3 views
1

데이터 프레임 df1과 df2를 결합하여 파이썬에서 df3을 얻으려는 것이 가장 바람직합니다 (, 즉 "df1.LETS의 모든 x에 대해"없음). .. ").두 개의 별개의 데이터 프레임을 결합하여 가능한 모든 반복을 표시합니다.

저는 현재 Google-fu에서 사용할 단어가 없기 때문에 다른 프로그래머가이 곤경을 치유 할 수 있기를 바라고 StackExchange에 있습니다.

감사합니다.

df1 df2  df3 
LETS NUMS  LETS NUMS 
A  1  A  1 
B  2  A  2 
     3  A  3 
     4  A  4 
       B  1 
       B  2 
       B  3 
       B  4 

답변

1
pd.DataFrame(index=pd.MultiIndex.from_product([df1.LETS, df2.NUMS], 
          names=("LETS", "NUMS"))).reset_index() 
# LETS NUMS 
#0 A  1 
#1 A  2 
#2 A  3 
#3 A  4 
#4 B  1 
#5 B  2 
#6 B  3 
#7 B  4 
2

당신은 사용할 수 있습니다 : 팬더 0.20.1을에 MultiIndex.from_product 새로운 기능

df = pd.merge(df1.assign(A=1), df2.assign(A=1), on='A').drop('A', axis=1) 
print (df) 
    LETS NUMS 
0 A  1 
1 A  2 
2 A  3 
3 A  4 
4 B  1 
5 B  2 
6 B  3 
7 B  4 

또 다른 해결책 :

df1 = pd.DataFrame({'LETS':list('AB')}) 
df2 = pd.DataFrame({'NUMS':range(1,5)}) 

cross join 솔루션 constantdrop 도우미 열 A와 열 assign + merge와 - MultiIndex.to_frame

df = pd.MultiIndex.from_product([df1['LETS'], df2['NUMS']]).to_frame() 
df.columns = ['LETS','NUMS'] 
print (df) 
    LETS NUMS 
A 1 A  1 
    2 A  2 
    3 A  3 
    4 A  4 
B 1 B  1 
    2 B  2 
    3 B  3 
    4 B  4 

print (df.reset_index(drop=True)) 
    LETS NUMS 
0 A  1 
1 A  2 
2 A  3 
3 A  4 
4 B  1 
5 B  2 
6 B  3 
7 B  4 
관련 문제