Nối khung dữ liệu gấu trúc theo tên cột


84

Tôi có hai khung dữ liệu với các tên cột sau:

frame_1:
event_id, date, time, county_ID

frame_2:
countyid, state

Tôi muốn lấy khung dữ liệu với các cột sau bằng cách nối (bên trái) vào county_ID = countyid:

joined_dataframe
event_id, date, time, county, state

Tôi không thể tìm ra cách thực hiện nếu các cột mà tôi muốn tham gia không phải là chỉ mục. Cách dễ nhất là gì? Cảm ơn!

Câu trả lời:


157

bạn có thể sử dụng tùy chọn left_on và right_on như sau:

pd.merge(frame_1, frame_2, left_on='county_ID', right_on='countyid')

Tôi không chắc chắn từ câu hỏi nếu bạn chỉ muốn hợp nhất nếu khóa nằm trong khung dữ liệu bên trái. Nếu đúng như vậy thì phần sau sẽ làm điều đó (phần trên sẽ thực hiện hợp nhất nhiều thành nhiều)

pd.merge(frame_1, frame_2, how='left', left_on='county_ID', right_on='countyid')

1
Để mở rộng điều này một chút, nếu bạn muốn chỉ định một chỉ mục ở một bên, bạn có thể sử dụng right_index=True.
Druckles

1
@Woody Điều gì xảy ra nếu frame_1đã có county_IDdưới dạng chỉ mục và frame_2đã có countyiddưới dạng chỉ mục? Tôi hiểu rằng tôi có thể thay thế frame_1.reset_index()cho frame_1(và tương tự cho frame_2) trong câu trả lời của bạn. Nhưng có cách nào hiệu quả hơn để tham gia / hợp nhất mà không cần đặt lại chỉ mục không?
Zhang18

3

bạn cần tạo county_IDchỉ mục cho khung bên phải:

frame_2.join ( frame_1.set_index( [ 'county_ID' ], verify_integrity=True ),
               on=[ 'countyid' ], how='left' )

đối với thông tin của bạn, ở gấu trúc, phép nối bên trái sẽ ngắt khi khung bên phải có các giá trị không phải là duy nhất trên cột tham gia. xem lỗi này .

vì vậy bạn cần xác minh tính toàn vẹn trước khi tham gia bằng , verify_integrity=True

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.