【问题标题】:Finding common values in Dataframe在 Dataframe 中查找共同值
【发布时间】:2021-01-30 17:16:55
【问题描述】:

我有 2 个不同长度的 df (df1, df2)。我想在 df1 中找到 df2 中的值,然后创建一个带有布尔值的新列,该列显示值是否存在。 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)

关于如何实现这一点的任何建议?

【问题讨论】:

  • 你试过了吗:df1["IS_PRESENT"] = df1["ID"].isin(df2["ID"])?或类似的东西:df1["IS_PRESENT"] = df1["ID"].isin(df2["ID"].tolist()) ?

标签: python pandas dataframe merge


【解决方案1】:

下面的代码就足够了。


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

df2['ID'] 返回系列。 isin 接受 Series 作为其参数,并根据组成员身份返回一个布尔值。

【讨论】:

    【解决方案2】:

    试试这个

    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())
    

    【讨论】:

    • 谢谢你的作品。起初它不起作用的原因是第二个 DF 中的列是大写的。
    【解决方案3】:

    你需要使用 isin 函数。 documentation

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

    【讨论】:

      猜你喜欢
      • 2023-01-16
      • 1970-01-01
      • 2017-11-09
      • 2015-06-28
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 1970-01-01
      • 2014-12-12
      相关资源
      最近更新 更多