pd.列表系列 - 检查列表中的元素

时间:2018-03-30 18:36:19

标签: python pandas

我有一个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.moddf.isin等。

1 个答案:

答案 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)