过滤如何应用自定义方法(lambda)



我有一个DataFrame,其中一列包含一个字符串,其中包含由逗号分隔的单词。

>>> df['column1']
# ....
996                  str1, str2, str3
997                  str4, str5, str7
998                  str8, str9, str10
# ...........

我需要将该列的内容视为字符串数组,所以我可以这样做:

 [
  # ..... 
  & (df['column1'].isin('str2')) # should return the row #996
  # ....
 ]

我试过了,但是没有成功,当然:

 [
  # ..... 
  & (df['column1'].split(',').isin('str2'))
  # ....
 ]

我该怎么做呢?或者更确切地说,我如何在过滤之前使用方法(lambda)修改列的内容?

UPDATE1:

这是我代码的一部分:

for x in pd.read_csv.....
      df_item = x
      if filter1:
        df_item = df_item[(df_item['column1'] == filter1)]
      if filter2:
        df_item = df_item[(df_item['column2'].isin(subjects))]
      # .....

如何将df['column2'].apply(lambda x: 'str2' in x.split(','))应用于

  if filter2:
    df_item = df_item[(df_item['column2'].isin(subjects))]

isin检查来自序列的值是否在可迭代对象中(在您的示例中为'str2')。而不是str2是否包含在您的序列值中。

如果你的序列包含字符串,那么得到你想要的一个方法是使用.str.contains()来检查字符串是否包含str2。例子——

df['column1'].str.contains('str2')

如果必须拆分内容,则使用','(即str2可以是任何其他字符串的子字符串)。您可以使用Series.apply。例子——

df['column1'].apply(lambda x: 'str2' in x.split(','))

要应用这个,只需使用这个来过滤DataFrame。例子——

if <somefilter>:
    df_item = df_item[df_item['column2'].apply(lambda x: 'str2' in x.split(','))]

最新更新