【问题标题】:i want to match two dataframe columns in python我想匹配python中的两个数据框列
【发布时间】:2019-06-20 12:37:22
【问题描述】:

我有两个数据框 df1(35k 记录)和 df2(100k 记录)。在 df1['col1'] 和 df2['col3'] 我有唯一的 id。我想将 df1['col1'] 与 df2['col3'] 匹配。如果它们匹配,我想用另外一列更新 df1 ,例如 df1['Match'] 值为 true ,如果不匹配,则更新为 False 值。我只想将这个 TRUE 和 False 值映射到匹配和不匹配的记录。

我正在使用.isin()function,我得到了正确的匹配但不匹配计数但无法正确映射它们。

Match = df1['col1'].isin(df2['col3'])
df1['match'] = Match

我也使用了merge函数,通过传递参数how=right但没有得到结果。

【问题讨论】:

  • 映射不正确是什么意思?使用您的语法,df1['match'] = df1['col1'].isin(df2['col3']) 似乎适用于您描述的目标。在df2['col3'] 中找到col1 值的df1 的行将为True,否则为False。
  • @kentwait 在完成df1['match'] = Match 之后,如果我有 10 条记录匹配。然后在 df1 中,它只是以串行方式更新,而不是它匹配的确切记录。
  • df1['col1'].isin(df2['col3']) 返回的行数等于df1 的行数,无论找到多少匹配的“True”记录。您可以尝试@crazyGamer 回答,但您的代码应该可以正常工作。也许还有其他问题。

标签: python pandas dataframe


【解决方案1】:

使用df.loc 索引:

df1['Match'] = False
df1.loc[df1['col1'].isin(df2['col3']), 'Match'] = True

【讨论】:

  • @crazyGamer- 谢谢它对我有用.. 我也可以为 True 案例映射 df2['col3'] 值吗?
  • 是的,您可以为 df2col3 重复此模式。它的工作原理是第一行创建一个新列并将所有值设置为 False。第二行使用布尔系列索引行,并将这些行设置为 True。
【解决方案2】:

您可以简单地执行以下操作:

df1['Match'] = df1['col1'].isin(df2['col3'])

例如:

import pandas as pd
data1 = [1,2,3,4,5]
data2 = [2,3,5]
df1 = pd.DataFrame(data1, columns=['a'])
df2 = pd.DataFrame(data2,columns=['c'])
print (df1)
print (df2)
df1['Match'] = df1['a'].isin(df2['c']) # if matches it returns True else False
print (df1)

输出:

  a
0  1
1  2
2  3
3  4
4  5

   c
0  2
1  3
2  5

   a  Match
0  1  False
1  2   True
2  3   True
3  4  False
4  5   True

【讨论】:

  • 这与 OP 在没有中间变量的情况下发布的内容相同。 OP 肯定遇到了其他问题。
  • @Ranjith - 这也不起作用..在您的示例中,所有值都按排序顺序排列,如果未排序将不起作用..您共享的代码就是我已经在做。请检查我的代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多