Làm cách nào để so sánh các cột trong các khung dữ liệu khác nhau?


23

Tôi muốn so sánh một cột của một df với các df khác. Các cột là tên và họ. Tôi muốn kiểm tra xem một người trong một khung dữ liệu có ở trong một khung dữ liệu khác không.


Bạn có thể vui lòng cho biết bạn muốn kết quả như thế nào không? Đây có phải là một df với các tên xuất hiện trong cả hai dfs không, và liệu bạn cũng cần bất cứ thứ gì khác như đếm, hoặc cột phù hợp trong df2, v.v. Cảm ơn!
Lyrist


Bạn có thể tham gia bên trong hai khung dữ liệu trên các cột bạn quan tâm và kiểm tra xem số lượng hàng trong kết quả có dương không.
DSaxton

FYI, so sánh tên và họ trên bất kỳ nhóm tên lớn nào sẽ kết thúc với nỗi đau - rất nhiều người có cùng tên!
Ken Syme

Câu trả lời:


22

Nếu bạn muốn kiểm tra các giá trị bằng nhau trên một cột nhất định, hãy nói Tên bạn có thể hợp nhất cả hai tệp dữ liệu với một cột mới:

mergedStuff = pd.merge(df1, df2, on=['Name'], how='inner')
mergedStuff.head()

Tôi nghĩ rằng điều này là hiệu quả hơn và nhanh hơn sau đó wherenếu bạn có một bộ dữ liệu lớn


1
Tôi nghĩ rằng chúng tôi muốn sử dụng một tham gia bên trong ở đây và sau đó kiểm tra hình dạng của nó.
DSaxton

10
df1.where(df1.values==df2.values).notna()

Truecác mục hiển thị các yếu tố phổ biến. Điều này cũng cho thấy vị trí của các yếu tố phổ biến, không giống như giải pháp với merge.


những gì là df.trong câu trả lời của bạn? Chỉ có df1df2không códf
LearneR

3

So sánh các giá trị trong hai cột khác nhau

Sử dụng bộ, nhận các giá trị duy nhất trong mỗi cột. Giao điểm của hai bộ này sẽ cung cấp các giá trị duy nhất trong cả hai cột.

Thí dụ:

df1 = pd.DataFrame({'c1': [1, 4, 7], 'c2': [2, 5, 1], 'c3': [3, 1, 1]}) df2 = pd.DataFrame({'c4': [1, 4, 7], 'c2': [3, 5, 2], 'c3': [3, 7, 5]}) set(df1['c2']).intersection(set(df2['c2']))

Đầu ra: {2, 5}


So sánh tên cột của hai datafram

Trong trường hợp bạn đang cố gắng so sánh tên cột của hai datafram:

Nếu df1df2là hai dataframes: set(df1.columns).intersection(set(df2.columns))

Điều này sẽ cung cấp các tên cột duy nhất có trong cả hai tệp dữ liệu.

Thí dụ:

df1 = pd.DataFrame({'c1': [1, 4, 7], 'c2': [2, 5, 1], 'c3': [3, 1, 1]})
df2 = pd.DataFrame({'c4': [1, 4, 7], 'c2': [3, 5, 2], 'c3': [3, 7, 5]})

set(df1.columns).intersection(set(df2.columns))

Đầu ra: {'c2', 'c3'}


Tôi nghĩ rằng câu hỏi là về việc so sánh các giá trị trong hai cột khác nhau trong các tệp dữ liệu khác nhau vì người hỏi muốn kiểm tra xem một người trong một khung dữ liệu có ở một cột khác không.
Divyanshu Shekhar

Cảm ơn, tôi đã nhận được câu hỏi sai. Tôi đã cập nhật câu trả lời ngay bây giờ.
aathiraks

1

Bạn có thể kiểm tra chính xác số lượng vị trí phổ biến và khác nhau giữa hai df bằng cách sử dụng isinvalue_counts ()

Như thế

df['your_column_name'].isin(df2['your_column_name']).value_counts()

Kết quả:

ví dụ là

Đúng = chung Sai = khác nhau


0

Lưu ý rằng các cột của dataframes là chuỗi dữ liệu. Vì vậy, nếu bạn lấy hai cột làm chuỗi gấu trúc, bạn có thể so sánh chúng giống như bạn làm với mảng numpy.

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.