У меня есть pandas df со столбцом списков слов, например:
df = pd.DataFrame({'Text':[['cat','dog','mouse'], ['horse','dog','rabbit'], ['cow','pig','hawk']] })
и второй df со списком слов для соответствия, например:
df2 = pd.DataFrame({'FarmAnimals':['horse','cow','pig'] })
И я хочу получить новый столбец с пересечением df и df2, например:
df3 = pd.DataFrame({'Text':[['cat','dog','mouse'], ['horse','dog','rabbit'], ['cow','pig','hawk'], 'Intersect':[],['horse'],['cow', 'pig'] })
Это мой текущий код, но на данный момент я практически все перепробовал
def match(df):
def find_match(v):
inter = set(v).intersection(list(df2['FarmAnimals']))
return inter
df['Intersect'] = df['Text'].apply(find_match)
df = df[['Intersect']]
return df
Но он продолжает преобразовывать v в список символов, а затем возвращает совпадения из одного символа. Я, вероятно, потратил более 20 часов на эту единственную ошибку и прошел через нее. Пересечение нескольких столбцов Pandas Поиск пересечения двух рядов в Pandas с использованием индекса Как я могу получить пересечение двух текстовых столбцов серии панд? и т. д. и т. д. и т. д., но ни один из них не был отдаленно полезен. В качестве дополнительного примечания: df имеет массивный размер (1 mil строк), а df2 также является Massice (100 000 строк), а fxn выполняется через ray python (оболочка стрелок apache).
Редактировать: это может быть ошибка типа данных, выходные данные, поступающие в пересечение, применяются ниже:
print(df.dtypes)
print(type(df['Text']))
print(df2.dtypes)
print(type(df2['FarmAnimals']))
print(type(df.iloc[0,0]))
print(df.iloc[0,0]))
print(type(df2.iloc[0,0]))
dtype: object
<class 'pandas.core.series.Series'>
dtype: object
<class 'pandas.core.series.Series'>
<class 'str'>
['cat', 'rat', 'rabbit']
<class 'str'>
Разве класс ячеек df['Text'] не должен быть списком??
Решено: проблема с pd.read_csv, преобразующим столбец списка в строку. Обработан столбец сразу после чтения csv с помощью:
from ast import literal_eval
text_data.raw_text = text_data.raw_text.apply(literal_eval)
Возможно: Добавить идентификатор, найденный в списке, в новый столбец в кадре данных pandas. Возможно, поменяйте список
bad_ids
наdf2['FarmAnimals']
Вы можете напечатать
df2['FarmAnimals'].iloc[0]
?просто добавил несколько из этих выходов