我有一个DataFrame,其中一列有列表作为条目。对于给定的给定值x
,我想得到一个pd.Series of booleans告诉我每个列表中是否x
。例如,给定DataFrame
index lists
0 []
1 [1, 2]
2 [1]
3 [3, 4]
我想做df.lists.contains(1)
之类的事情并返回False, True, True, False
。
我知道我可以用Python循环或理解来做到这一点,但理想情况下我会像Pandas解决方案类似于df.mod
,df.isin
等。
答案 0 :(得分:4)
In [79]: df['lists'].apply(lambda c: 1 in c)
Out[79]:
0 False
1 True
2 True
3 False
Name: lists, dtype: bool
PS我认为在这种情况下列表理解解决方案可能会更快
40.000行的时间DF:
In [81]: df = pd.concat([df] * 10**4, ignore_index=True)
In [82]: df.shape
Out[82]: (40000, 2)
In [83]: %timeit df['lists'].apply(lambda c: 1 in c)
22.5 ms ± 87.8 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [84]: %timeit [1 in x for x in df['lists']]
4.87 ms ± 25.9 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)