2015-01-30 24 views
23

Tôi đang cố gắng để bên trong tham gia DataFrame A đến DataFrame B và đang chạy vào một lỗi.Python Pandas bên trong tham gia

Đây là tuyên bố tham gia của tôi:

merged = DataFrameA.join(DataFrameB, on=['Code','Date']) 

Và đây là lỗi:

ValueError: len(left_on) must equal the number of levels in the index of "right" 

Tôi không chắc chắn những vấn đề trật tự cột (họ không thực sự "ra lệnh" chúng là gì?) , nhưng chỉ trong trường hợp, các Khung dữ liệu được tổ chức như thế này:

DataFrameA: Code, Date, ColA, ColB, ColC, ..., ColG, ColH (shape: 80514, 8 - no index) 
DataFrameB: Date, Code, Col1, Col2, Col3, ..., Col15, Col16 (shape: 859, 16 - no index) 

Tôi có cần sửa câu lệnh kết hợp của mình không? Hoặc là có cách nào khác, tốt hơn để có được giao lộ (hoặc tham gia bên trong) của hai DataFrames này?

+0

Chỉ cần một cái gì đó để chỉ ra, về mặt kỹ thuật tất cả dfs và loạt và tấm cho rằng vấn đề sẽ có một chỉ số, nó có thể không là một trong những bạn đã đặt nhưng luôn luôn có một, có lẽ int64 bắt đầu từ 0. – EdChum

+0

hoàn toàn đúng. Tôi chỉ không chắc chắn làm thế nào để nói rằng ngắn gọn. Chỉ số chuẩn? Chỉ mục mặc định? –

Trả lời

27

sử dụng merge nếu bạn không tham gia vào các chỉ số:

merged = pd.merge(DataFrameA,DataFrameB, on=['Code','Date']) 

Theo dõi câu hỏi dưới đây:

Dưới đây là một ví dụ nhân rộng:

import pandas as pd 
# create some timestamps for date column 
i = pd.to_datetime(pd.date_range('20140601',periods=2)) 

#create two dataframes to merge 
df = pd.DataFrame({'code': ['ABC','EFG'], 'date':i,'col1': [10,100]}) 
df2 = pd.DataFrame({'code': ['ABC','EFG'], 'date':i,'col2': [10,200]}) 

#merge on columns (default join is inner) 
pd.merge(df, df2, on =['code','date']) 

kết quả này là :

code col1 date col2 
0 ABC  10  2014-06-01 10 
1 EFG  100  2014-06-02 200 

Điều gì sẽ xảy ra khi bạn chạy mã này?

+0

hợp nhất thậm chí có một đối số cho loại tham gia, cách: {‘left’, ‘right’, ‘outer’, ‘inner’}, mặc định ‘inner’ – flyingmeatball

7

Dưới đây là một cách khác để thực hiện join. Không giống như câu trả lời được xác minh, đây là câu trả lời chung chung hơn áp dụng cho tất cả các loại tham gia khác.

Nội Tham gia

inner join cũng có thể được thực hiện bằng cách đề cập một cách rõ ràng như sau trong how:

pd.merge(df1, df2, on='column_name', how='inner') 

Các aplies phương pháp tương tự cho các loại tham gia:

OuterJoin

pd.merge(df1, df2, on='column_name', how='outer') 

Left Tham

pd.merge(df1, df2, on='column_name', how='left') 

Ngay Tham

pd.merge(df1, df2, on='column_name', how='right') 
Các vấn đề liên quan