【问题标题】:Pandas dataframe, match column against list of sub-strings, continuous rows, keep only sub-stringPandas 数据框,将列与子字符串列表匹配,连续行,仅保留子字符串
【发布时间】:2020-08-12 12:32:16
【问题描述】:

在 Pandas 数据框中,我想将 Col1 与关键字列表进行匹配,如下所示:

关键字需要不同,位于同一列和 3 个连续行上(关键字 1 != 关键字 2 != 关键字 3,例如它们位于第 x、x+1 和 x+2 行)

我只希望关键字作为结果返回(在下面的示例中“def”被删除)


list_keywords = ['abc', 'ghi', 'jkl mnop','blabla']

Index  Col1

1     abc def
2     ghi
3     jkl mnop
4     qrstu
5     vw
>>>

1     abc
2     ghi
3     jkl mnop

【问题讨论】:

  • pat = '|'.join(list_keywords); df.Col1.str.extract(f'({pat})')?

标签: string pandas dataframe intersection


【解决方案1】:

根据@HTRS 的回答,这似乎是对我的问题的部分回答。 这段代码根据关键字列表过滤 Brands 列,并过滤掉与关键字不同的字符串部分。

import pandas as pd

list_filtered = []
list_keywords = ['abc', 'ghi', 'jkl mnop','blabla']

for _, row in df.iterrows():
  if row['Brand'] in list_keywords:
     row['Brand'] = row['Brand']
     list_filtered.append(row['Brand'])
  else:
    val = row['Brand'].split()
    row['Brand'] = ' '.join(str(i) for i in val if i in list_keywords)
    list_filtered.append(row['Brand'])

df['Filtered'] = list_filtered
print(df)

【讨论】:

  • 如果我的回答解决了你的问题,你能接受吗?谢谢。
【解决方案2】:

你可以用df.iterrows()做这样的事情。

for _, row in df.iterrows():
  if row['col1'] in list_keywords:
    row['col1'] = row['col1']
  else:
    val = row['col1'].split()
    row['col1'] = ' '.join(str(i) for i in val if i in list_keywords)

df

    col1
0   abc
1   ghi
2   jkl mnop
3   
4   

【讨论】:

  • 很抱歉问了一个新手问题,但是我怎样才能将它应用到我的 df 中呢?我需要把它变成一个函数吗?
  • 假设您的数据框名为df,您可以直接使用代码(不需要转换为函数),或者在我使用过df 的任何地方使用您的数据框的名称。如果这对您有帮助,请告诉我!
猜你喜欢
  • 2013-06-18
  • 2023-03-28
  • 2021-11-30
  • 2022-01-10
  • 1970-01-01
  • 2013-03-07
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
相关资源
最近更新 更多