【问题标题】:Pandas DataFrame filter str column based on other columnPandas DataFrame 根据其他列过滤 str 列
【发布时间】:2019-06-15 01:56:48
【问题描述】:

我想根据一个字符串列的值是否是另一个字符串列中的值的子字符串来过滤DataFrame

根据this 2 岁的帖子,这可以使用 apply 来完成,如下所示:

df = pd.DataFrame({'FNAME': ['Max', 'Tobi'], 'LNAME': ['Foo', 'Tobiwan']})

df.loc[ df.apply(lambda row: row.FNAME in row.LNAME, axis=1) ]

  FNAME    LNAME
1  Tobi  Tobiwan

我想知道是否有一些内置的矢量化方法可以做到这一点?

【问题讨论】:

  • 没有一种超级有效的方法可以做到这一点,因为pandas 字符串方法并不是特别快。您可能可以使用列表理解来提高性能:[x in y for x, y in zip(df.FNAME, df.LNAME)]

标签: python string pandas vectorization apply


【解决方案1】:

使用replace

df[df.LNAME.replace(regex=r'(?i)'+ df.FNAME,value=True)==True]
  FNAME    LNAME
1  Tobi  Tobiwan

【讨论】:

  • 使用正则表达式和替换很好地使用不区分大小写。没想到我们可以使用 value==True 并只拉 Trues。不错 1 :) +1
猜你喜欢
  • 1970-01-01
  • 2019-04-29
  • 2020-11-14
  • 2020-04-25
  • 2019-09-30
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
相关资源
最近更新 更多