Nếu bạn vượt qua các tham số keys
-concat
, các cột của dataframe kết quả sẽ bao gồm một đa-index mà theo dõi những dataframes gốc:
In [1]: c=pd.concat([df,df2],axis=1,keys=['df1','df2'])
c
Out[1]:
df1 df2
a b c a b c
A na na na 1 na 1
B na 1 1 na na na
C na 1 na na 1 na
D NaN NaN NaN na 1 na
Kể từ khi các mảng cơ bản bây giờ có giống nhau hình dạng, bây giờ bạn có thể sử dụng để phát sóng ==
so sánh của bạn và sử dụng như một mặt nạ để trả lại tất cả các giá trị phù hợp:
In [171]: m=c.df1[c.df1==c.df2];m
Out[171]:
a b c
A NaN NaN NaN
B NaN NaN NaN
C NaN 1 NaN
D NaN NaN NaN
Nếu giá trị 'na' của bạn đang thực sự số không, bạn có thể sử dụng một ma trận thưa thớt để giảm này đến tọa độ của các giá trị phù hợp (bạn sẽ mất trỏ và tên cột mặc dù):
import scipy.sparse as sp
print(sp.coo_matrix(m.where(m.notnull(),0)))
(2, 1) 1.0
Câu trả lời rất hay, nhưng tôi nghĩ bạn cần 'bất kỳ' thay vì' tất cả' ở đó. Ngoài ra, OP sẽ vẫn cần tìm cột phù hợp. –
Câu trả lời tuyệt vời –
@lev bạn nói đúng, tôi hiểu nhầm câu hỏi của anh ấy, tôi đã chỉnh sửa câu trả lời của mình – maxymoo