给定两个索引相同的 pd.Series 字符串,检查第一个 pd.Series 的每个元素是否是第二个 pd.Series 的相应元素的子字符串的最有效方法是什么?
例子:
s1 = pd.Series(['cat', 'dog', 'ham'])
s2 = pd.Series(['catbird', 'frog', 'hamster'])
pd.Series([t[0] in t[1] for t in zip(s1, s2)], index=s1.index)
Run Code Online (Sandbox Code Playgroud)
产量
0 True
1 False
2 True
dtype: bool
Run Code Online (Sandbox Code Playgroud)
我认为你的解决方案很好,因为熊猫.str函数也使用循环(并处理缺失值),所以有时会更慢。
我通过小的修改更改了解决方案 - 将元组解包为变量,t并且v在测试数据中它更快一点:
np.random.seed(2020)
N = 10000
s1 = pd.Series(np.random.choice(list(string.ascii_letters), size=N))
s2 = pd.DataFrame(np.random.choice(list(string.ascii_letters), size=(N, 3))).sum(axis=1)
In [82]: %timeit (pd.Series([t[0] in t[1] for t in zip(s1, s2)], index=s1.index))
3.47 ms ± 271 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [83]: %timeit (pd.Series([t in v for t, v in zip(s1, s2)], index=s1.index))
2.89 ms ± 130 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |