我有看起来像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')
的东西.
如果你有一系列sets
,只需使用交集运算符&
df.loc[df['Label2'] & {'l2'}]
假设"l2"是一个字符串,而"Label2"由集合组成,一个简单的解决方案是将set列转换为字符串并执行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
columns
转换为 df 后将 isin
与 any
一起使用
df[pd.DataFrame(df.Label2.tolist()).isin(['l2']).any(1)]