[英]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.