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

Мне нужно проверить, находится ли весь список строк в столбце. это мой код:

import pandas as pd
frame=["foo", "abc", "story"]
df = pd.DataFrame({'col1': ['foo abc', 'foobar abc', 'bar32', 'abc 45'], 'col2': ['story', 'epic', 'story', 'baz']}) 
df["Concat"] = df["col1"] +' '+ df["col2"]
df2=df[df['Concat'].apply(lambda x: set(frame).issubset(x))]
print(df2)

это вывод:

 Empty DataFrame
Columns: [col1, col2, Concat]
Index: []

, но если я работаю с буквами, как показано в коде ниже, я получаю желаемый вывод

import pandas as pd
frame=["f", "a", "s"]
df = pd.DataFrame({'col1': ['foo abc', 'foobar abc', 'bar32', 'abc 45'], 'col2': ['story', 'epic', 'story', 'baz']}) 
df["Concat"] = df["col1"] +' '+ df["col2"]
df2=df[df['Concat'].apply(lambda x: set(frame).issubset(x))]
print('\n',df2)

желаемый вывод:

       col1   col2         Concat
0  foo abc  story  foo abc story

как я могу работать со строками, а не буквами и при этом получать желаемый вывод?

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

В первом примере кода вы сравниваете набор из 3 элементов frame с каждой строкой, присутствующей в каждой строке x, которая преобразуется в набор только из 1 элемента: issubset возвращает False для каждой строки поскольку 3 элемента не могут быть подмножеством 1 элемента.

Если вы разделите x перед вызовом apply, вы проверите, является ли frame подмножеством списка элементов:

df['Concat'].str.split().apply(lambda x: set(frame).issubset(x))
1 голос
/ 16 апреля 2020

Самый простой способ сделать это - изменить x на x.split() в строке 5

import pandas as pd
frame=["foo", "abc", "story"]
df = pd.DataFrame({'col1': ['foo abc', 'foobar abc', 'bar32', 'abc 45'], 'col2': ['story', 'epic', 'story', 'baz']}) 
df["Concat"] = df["col1"] +' '+ df["col2"]
df2=df[df['Concat'].apply(lambda x: set(frame).issubset(x.split()))]
print(df2)

Сейчас вы проверяете, является ли набор слов подмножеством строки. Эта операция не является четко определенной, потому что она неоднозначна, как интерпретировать строку как набор - является ли строка набором символов или набором слов? По умолчанию python интерпретирует строки как набор символов, поскольку он не знает соглашений на естественном языке, таких как «слова разделены пробелами». x.split() разрешает эту неоднозначность, разбивая слова на пробелы, что, как я полагаю, является тем, что вы хотите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...