簡體   English   中英

檢查一個 dataframe 中的列對是否存在於另一個中?

[英]Check if column pair in one dataframe exists in another?

d1 = {'id': ['a','b','c'], 'ref': ['apple','orange','banana']}
df1 = pd.DataFrame(d1)

d2 = {'id': ['a','b','d'], 'ref': ['apple','orange','banana']}
df2 = pd.DataFrame(d2)

我想看看df1中的id和ref的列對是否存在於df2中。 我想在 df2 中創建一個 boolean 列來完成此操作。

所需的 Output:

d3 = {'id': ['a','b','d'], 'ref': ['apple','orange','banana'], 'check':[True,True,False]}
df2 = pd.DataFrame(d3)

我已經嘗試了以下以及簡單的分配/isin

df2['check'] = df2[['id','ref']].isin(df1[['id','ref']].values.ravel()).any(axis=1)

df2['check'] = df2.apply(lambda x: x.isin(df1.stack())).any(axis=1)

我怎么能在沒有合並的情況下做到這一點?

我不確定您為什么不喜歡合並,但是您可以將isintuple一起使用:

df2['check'] = df2[['id','ref']].apply(tuple, axis=1)\
                  .isin(df1[['id','ref']].apply(tuple, axis=1))

Output:

  id     ref  check
0  a   apple   True
1  b  orange   True
2  d  banana  False

我想這就是你要找的:

d1 = {'id': ['a','b','c'], 'ref': ['apple','orange','banana']}
df1 = pd.DataFrame(d1)

d2 = {'id': ['a','b','d'], 'ref': ['apple','orange','banana']}
df2 = pd.DataFrame(d2)

result =  df1.loc[df1.id.isin(df2.id) & df2.ref.isin(df2.ref)]

盡管合並幾乎肯定會更有效:

#create a compound key with id + ref
df1["key"] = df1.apply(lambda row: f'{row["id"]}_{row["ref"]}', axis=1)
df2["key"] = df2.apply(lambda row: f'{row["id"]}_{row["ref"]}', axis=1)
#merge df2 on df1 on compound key
df3 =  df1.merge(df2, on="key")
#locate the matched keys in df1
result = df1.set_index("id").loc[df3.id_x]

暫無
暫無

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

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