在Dataframe中查找公共值

2024-05-28 19:43:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个不同长度的df(df1,df2)。我想在df2中找到df1中存在的值,然后用布尔值创建一个新列,显示这些值是否存在。df2只包含1列,比df1少行。以下是dfs的一个示例:

df1:

Name  ID    CRITICAL  RATING
win   mrp53  YES        8
lin   mrp54  No         3
mac   0989   YES        8
win   mrp56  YES        8
mac   786    YES        8
win   hte45  YES        8
.
.

df2:

ID
mrp53
hfy56
dggg4
gfgshh4

比较后,df应如下所示:

Name  ID    CRITICAL  RATING  IS_PRESENT
win   mrp53  YES        8       TRUE
lin   mrp54  No         3       FALSE
mac   0989   YES        8       FALSE   
win   mrp56  YES        8       FALSE

我正在使用下面的,它正在创建列,但值是错误的。一切都是假的:

new_df = df1['ID'].assign(IS_PRESENT= df1['ID'].isin(df2['ID]).astype(bool)

有没有关于如何实现这一目标的建议


Tags: nonameidfalsedfmacwinyes
3条回答

下面的代码应该足够了


df1['IS_PRESENT'] = df1['ID'].isin(df2['ID'])

df2['ID']返回序列isin接受Series作为其参数,并基于组成员身份返回布尔值

您需要使用isin函数documentation

df1['IS_PRESENT'] = df1['ID'].isin(df2['ID'].values)

enter image description here

试试这个

import pandas as pd
import numpy as np
F = {'id': [1,1,1,1,2,2,2,3,3,3,3,3], 'element': ['a','b','c','d','a','b','b','a','a','b','c','c']}
df = pd.DataFrame(data = F)
FF = {'id': [1,5,3,3,4], 'element2': ['aa','ba','ca','da','aa']}
df2 = pd.DataFrame(data = FF)
df['is present'] = df['id'].isin(df2['id'].tolist())

相关问题 更多 >

    热门问题