python-3.x - python / Pandas : why the empty dataframe when using isin?

标签 python-3.x pandas dataframe

我正在尝试查找 df2 中的“代码”出现在 df1 中任何“code1、code2、code3”列中的位置,并返回 df2 中匹配成功的行。

这是我的示例代码:

df1 = pd.DataFrame(
        {
        'terms' : ['term1','term2'],
        'code1': ['1234x', '4321y'],
        'code2': ['2345x','5432y'],
        'code3': ['3456x','6543y']
        }
        )
df1 = df1[['terms'] + df1.columns[:-1].tolist()]

df2 = pd.DataFrame(
        {
        'name': ['Dan','Sara'],
        'rate': ['3','3.5'],
        'location': ['FL','OH'],
        'code': ['4444g','6543y']                           
         })
df2 = df2[['name','rate','location','code']]

#combining code1,code2,code3 into new column df1['allcodes']
df1['allcodes'] = df1[df1.columns[1:]].apply(lambda x: ','.join(x.dropna().astype(str)),axis=1)

print(df2[df2['code'].isin(df1['allcodes'])])

所需的结果将是 df2 中在 df1 中找到代码的行:

   name rate location   code
1  Sara  3.5       OH  6543y

结果是:

Empty DataFrame
Columns: [name, rate, location, code]
Index: []

为什么这会返回一个空数据框?

最佳答案

选项 1
np.in1d
不加区别地检查特定行的 df2.code 是否在 df1

中的任何位置
df2[np.in1d(df2.code, df1[['code1', 'code2', 'code3']])]

   name rate location   code
1  Sara  3.5       OH  6543y

加快速度

df2[np.in1d(df2.code.values, df1[['code1', 'code2', 'code3']].values)]

选项 2
检查 df2.loc[x, 'code'] 是否在 df1.loc[x]
我们使用 pd.DataFrame.eq 方法,因此我们可以传递 axis=0 参数来检查系列是否等于每一列。基本上,axis=0 意味着对齐索引(而不是列)。

df2[df1[['code1', 'code2', 'code3']].eq(df2.code, 0).any(1)]

   name rate location   code
1  Sara  3.5       OH  6543y

加快速度

df2[(df1[['code1', 'code2', 'code3']].values == df2['code'].values[:, None]).any(1)]

关于python-3.x - python / Pandas : why the empty dataframe when using isin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46477240/

相关文章:

python - 在导入的文件中进行本地导入

python - 如何不在列表中插入相同的值组合?

python - 如何使用并发将数据帧附加到空数据帧

python - str。包含在pandas数据框中创建新列

database - 关系数据库与 R/Python 数据框架

scala - 如何在没有 SQL 查询的情况下使用 Spark Dataframe 检查相等性?

r - 通过另一列的成对组合计算一列的唯一值并按R中的第三列分组

python - '\b' 在 Python 中如何工作?

python - 在多索引数据框中插入列

python - Shelve 在 Python 3.3 中为 hello world 示例提供了 AttributeError 使用 "with shelve.open"语法,但并非没有它