У меня есть данные 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').
действительно ли значения в Label2 установлены? или это шнур?
Кроме того, не могли бы вы опубликовать желаемый результат, чтобы вам было легче помочь
@coldspeed, в моем примере это строка, но не обязательно.






Предполагая, что «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}
Если у вас есть серия sets, просто используйте оператор перекресток&
df.loc[df['Label2'] & {'l2'}]
Спасибо, использование пересечения достигает этого (и также выглядит как эффективный способ)
чем использование df.loc[] отличается от простого использования df[..]1
@VuNguyen Для этой цели совсем не отличается;}
Использование isin с any после преобразования setscolumns в df
df[pd.DataFrame(df.Label2.tolist()).isin(['l2']).any(1)]
"l2" это строка?