Выбор Pandas Dataframe, удовлетворяющего членству - PullRequest
1 голос
/ 11 апреля 2019

У меня есть данные df выглядит как

Label1 Label2
a      {l1,l2}
b      {l1}
c      {}
d      {l3}
e      {l3,l2}

Я хочу иметь возможность выбирать строки, столбец Label2 которых содержит l2, то есть строки с label1 =a and e.Я знаю о методе isin, например, df['Label2'].isin(..), но это не тот же вопрос о членстве (больше похожий на обратный).Я хочу что-то похожее на df['Label2'].contains('l2').

Ответы [ 3 ]

2 голосов
/ 11 апреля 2019

Если у вас есть серия sets, просто используйте оператор пересечение &

df.loc[df['Label2'] & {'l2'}]
2 голосов
/ 11 апреля 2019

Использование isin с any после преобразования sets columns в df

df[pd.DataFrame(df.Label2.tolist()).isin(['l2']).any(1)]
2 голосов
/ 11 апреля 2019

Предполагая, что «l2» является строкой, а «Label2» состоит из наборов, простым решением будет просто преобразовать столбец набора в строку и выполнить str.contains:

label = "l2"
df[df['Label2'].astype(str).str.contains(r'\b{}\b'.format(label))]

  Label1    Label2
0      a  {l1, l2}
4      e  {l2, l3}

Другой вариант - это понимание списка:

df[['l2' in x if isinstance(x, set) else False for x in df['Label2']]]

  Label1    Label2
0      a  {l1, l2}
4      e  {l2, l3}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...