我有一个 DataFrame,其中一列将列表作为条目。对于给定的给定值,x我想得到一个 pd.Series 布尔值,告诉我是否x在每个列表中。例如,给定 DataFrame
index lists
0 []
1 [1, 2]
2 [1]
3 [3, 4]
Run Code Online (Sandbox Code Playgroud)
我想做类似的事情df.lists.contains(1)然后回来False, True, True, False。
我知道我可以用一个Python循环或理解这样做,但我非常喜欢熊猫的解决方案类似df.mod,df.isin等等。
In [79]: df['lists'].apply(lambda c: 1 in c)
Out[79]:
0 False
1 True
2 True
3 False
Name: lists, dtype: bool
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
388 次 |
| 最近记录: |