簡體   English   中英

使用 pandas 在兩個數據幀中查找相似的行

[英]Finding similar rows in two dataframes using pandas

我有兩個數據框,第一個是根數據框,第二個是從第一個數據框獲得的(基於“名稱”必須重復 3 次且“子集”必須是模式的模式,如圖所示dataframe 2 下)。

基於這兩個數據框,我需要在根 dataframe 中添加一個“備注”列,並且該列寫入“是”是 dataframe 中的特定行 1 存在於 Z6A8064B5DF47945550DZ552C 中,否則它應該為空白。

數據框1-

Name    Subset            Value
A       67-A-5678          14
A       58-ABC-87555       187
A       45-ASH-87954       5465
T       78-A-8793          4533
T       52-O-5642          5644
S       34-A-8785          454
S       58-ASO-98978       54
S       23-ASH-87895       784
X       98-X-87876         455
X       87-ABC-54578       4545
X       56-ASH-89667       854
Y       09-D-98644         45
Y       87-ABC-78834       98
Y       87-ASH-87455A      4566
L       67-A-87545         78
L       89-GHS-08753       12 
L       78-PHU-09876       655 

數據框2-

Name    Subset             Value
A       67-A-5678          14       
A       58-ABC-87555       187      
A       45-ASH-87954       5465     
X       98-X-87876         455
X       87-ABC-54578       4545
X       56-ASH-89667       854
Y       09-D-98644         45
Y       87-ABC-78834       98
Y       87-ASH-87455A      4566

Output 數據幀-

Name    Subset            Value    Remark
A       67-A-5678          14      Yes
A       58-ABC-87555       187     Yes 
A       45-ASH-87954       5465    Yes
T       78-A-8793          4533
T       52-O-5642          5644
S       34-A-8785          454
S       58-ASO-98978       54
S       23-ASH-87895       784
X       98-X-87876         455     Yes
X       87-ABC-54578       4545    Yes
X       56-ASH-89667       854     Yes
Y       09-D-98644         45      Yes
Y       87-ABC-78834       98      Yes
Y       87-ASH-87455A      4566    Yes
L       67-A-87545         78
L       89-GHS-08753       12 
L       78-PHU-09876       655

PS 實際數據集可以有很多列/行。

您可以與indicator=True merge並使用 "both" 屬性來獲取匹配的行:

(df1.merge(df2, on=list(df1.columns), how='left', indicator=True)
    .assign(Remark=lambda d: d['_merge'].eq('both').map({True: 'Yes', False: ''}))
    .drop(columns='_merge')
)

注意。 要查看其工作原理,請注釋.drop(columns='_merge')行以保留臨時_merge

output:

   Name         Subset  Value Remark
0     A      67-A-5678     14    Yes
1     A   58-ABC-87555    187    Yes
2     A   45-ASH-87954   5465    Yes
3     T      78-A-8793   4533       
4     T      52-O-5642   5644       
5     S      34-A-8785    454       
6     S   58-ASO-98978     54       
7     S   23-ASH-87895    784       
8     X     98-X-87876    455    Yes
9     X   87-ABC-54578   4545    Yes
10    X   56-ASH-89667    854    Yes
11    Y     09-D-98644     45    Yes
12    Y   87-ABC-78834     98    Yes
13    Y  87-ASH-87455A   4566    Yes
14    L     67-A-87545     78       
15    L   89-GHS-08753     12       
16    L   78-PHU-09876    655       

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM