сравнить два строковых столбца в пандах - PullRequest
0 голосов
/ 23 сентября 2019

Мне нужно сравнить наборы ключевых слов в последовательных строках панд: чтобы упростить задачу, я создал столбец df['next_row'] = df.key_words.shift(-1). Вот df

df = pd.DataFrame({'customer' : [1,1,2,2],
"key_words":[['oil change'], ['oil change', 'filter'], ['leak'], ['leak', 'filter']]}

, если я попытаюсь df['next_row'].isin(df.key_words), я получуошибка

TypeError: unhashable type: 'list'

Я понимаю, что не могу сравнивать списки и должен вместо этого использовать строки.Я превратил next_row в строку:

df.next_row = df.next_row .str.join('|')

теперь, если я попытаюсь

df.key_words.str.contains(df['next_row'])

Я получу ошибку:

TypeError: 'Series' objects are mutable, thus they cannot be hashed

Как выполнить сравнение строк за строкой так вывод будет выглядеть примерно так:

df['word_match'] = ['oil change', nan, 'leak', nan]

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

Вы можете изменить это в соответствии со своими потребностями.Будут NaNs, и вы можете позаботиться об этом тоже.

 def compare(df):
     for val in df.key_words:
          if isinstance(df.consecutive,list):
              if val in list(df.consecutive):
                  return 'in'
              else:
                  return 'not in'
          elif isinstance(df.consecutive,float): #you might want to check for NaNs here
              continue

 df.apply(compare,axis=1)
0 голосов
/ 24 сентября 2019

Будет предоставлен список слов, которые показывают только повторяющиеся вхождения в пределах группы клиентов, согласно запросу.

customer_lists = df.groupby('customer')['key_words'].apply(list)
word_match = []

for cust in customer_lists:
    word_match.extend(list(set.intersection(*map(set,cust))))

print(word_match)
...