2015-06-01 35 views
5

Tôi mới với gấu trúc và tôi đang cố gắng tham gia hai khung dữ liệu dựa trên sự bình đẳng của một cột cụ thể. Ví dụ: giả sử rằng tôi có các thông tin sau:tham gia hai khung dữ liệu gấu trúc bằng cách sử dụng một cột cụ thể

df1 
A B C 
1 2 3 
2 2 2 

df2 
A B C 
5 6 7 
2 8 9 

Cả hai khung dữ liệu có cùng cột và giá trị của chỉ một cột (nói A) có thể bằng nhau. Những gì tôi muốn là đầu ra là:

df3 
A B C B C 
2 8 9 2 2 

Giá trị cho cột 'A' là duy nhất trong cả hai khung dữ liệu.

Cảm ơn

Trả lời

4
pd.concat([df1.set_index('A'),df2.set_index('A')], axis=1, join='inner') 

Nếu bạn muốn duy trì cột A như một tổ chức phi-index, sau đó:

pd.concat([df1.set_index('A'),df2.set_index('A')], axis=1, join='inner').reset_index() 
+1

Với phương pháp tốt này - A trở thành chỉ mục. Đây có thể là những gì OP muốn, nhưng bạn cũng có thể cung cấp việc sử dụng 'reset_index' để biến nó thành một cột nếu đó là những gì được mong muốn. –

+0

Chắc chắn, chỉ mục có thể được đặt lại bằng cách thêm '.reset_index()' vào cuối. 'pd.concat ([df1.set_index ('A'), df2.set_index ('A')], trục = 1, nối = 'bên trong'). Reset_index()' – vk1011

+1

chỉnh sửa câu trả lời của bạn tốt hơn bao gồm thông tin add'l –

5

Ngoài ra, bạn có thể chỉ cần làm:

df3 = df1.merge(df2, on='A', how='inner', suffixes=('_1', '_2')) 

Và sau đó bạn có thể theo dõi nguồn gốc của mỗi giá trị

+0

Hậu tố là gì? – ahajib

+0

thêm hậu tố cho mỗi tên cột để bạn không bị bỏ lại, ví dụ: hai cột được gọi là "" B "'. Khi bạn có các tên cột trùng lặp, bạn sẽ có hành vi rất bất ngờ khi nói, 'df3 ['B']. Áp dụng (lambda x: ...)' kể từ bây giờ 'df ['B']' là một DataFrame chứ không phải là một chuỗi . –

+0

Tuyệt vời. Điều đó thực sự giúp ích rất nhiều – ahajib

Các vấn đề liên quan