簡體   English   中英

檢查一個數據框中的值是否存在於另一個數據框中

[英]Check if value from one dataframe exists in another dataframe

我有 2 個數據框。

Df1 = pd.DataFrame({'name': ['Marc', 'Jake', 'Sam', 'Brad']
Df2 = pd.DataFrame({'IDs': ['Jake', 'John', 'Marc', 'Tony', 'Bob']

我想遍歷Df1['name']每一行並檢查每個名稱是否在Df2['IDs']某處。

如果名稱在那里,結果應該返回 1,如果不是這樣,則返回 0:

Marc  1 
Jake  1
Sam   0 
Brad  0

謝謝你。

使用isin

Df1.name.isin(Df2.IDs).astype(int)

0    1
1    1
2    0
3    0
Name: name, dtype: int32

在數據框中顯示結果

Df1.assign(InDf2=Df1.name.isin(Df2.IDs).astype(int))

   name  InDf2
0  Marc      1
1  Jake      1
2   Sam      0
3  Brad      0

在 Series 對象中

pd.Series(Df1.name.isin(Df2.IDs).values.astype(int), Df1.name.values)

Marc    1
Jake    1
Sam     0
Brad    0
dtype: int32

這應該這樣做:

Df1 = Df1.assign(result=Df1['name'].isin(Df2['IDs']).astype(int))

通過使用merge

s=Df1.merge(Df2,left_on='name',right_on='IDs',how='left')
s.IDs=s.IDs.notnull().astype(int)
s
Out[68]: 
   name  IDs
0  Marc    1
1  Jake    1
2   Sam    0
3  Brad    0

這是一種方式。 轉換為 O(1) 查找設置並使用astype(int)將布爾值表示為整數。

values = set(Df2['IDs'])

Df1['Match'] = Df1['name'].isin(values).astype(int)

嗨 qq 當 DF1 的名稱列中有重復值時會發生什么。 例如:如果 Marc 在 DF2 中被列出兩次,結果表中的列 InDF2 會將其標記為 2 還是僅標記 1? 我有一個類似的問題,它只是將其標記為 1。

謝謝

暫無
暫無

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

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