【发布时间】:2017-12-29 21:32:04
【问题描述】:
我正在尝试优化我的代码。一个电话很快,但因为我经常遇到一些问题。
我的输入数据如下所示:
df = pd.DataFrame(data=np.random.randn(30),
index=pd.date_range(pd.datetime(2016,1,1), periods = 30))
df.iloc[:20] = np.nan
现在我只想应用一个简单的功能。这是我要优化的部分:
s = df >= df.shift(1)
s = s.applymap(lambda x: 1 if x else 0)
现在我有 1000 个循环,最好是 3:每个循环 1.36 毫秒。我想应该可以做得更快。不确定我是否应该矢量化,仅使用 numpy 或使用 cython。任何想法的最佳方法?我对移位运算符有点挣扎。
【问题讨论】:
-
不需要循环或
apply,只需:(df >= df.shift(1)).dropna().astype(int) -
谢谢,获得了 2 倍的改进! 1000 次循环,最好的 3 次:每个循环 776 µs
-
其实去掉
dropna。你不需要它
标签: python performance pandas numpy profiling