擅长:python、mysql、java
<p>这里有一种更有效的方法。在</p>
<pre><code>In [50]: s = Series(pd.date_range('20000101',freq='D',periods=10000))
In [51]: result = s.where(s.dt.weekday==0,pd.TimedeltaIndex(7-s.dt.weekday,unit='d')+s)
In [52]: expected = s.apply(lambda x: x + pd.DateOffset(days=7-x.weekday()) if x.weekday() else x)
In [53]: (result==expected).all()
Out[53]: True
</code></pre>
<p>这实际上是在python空间中循环。在</p>
^{pr2}$
<p>在这里,我们正在构造一个TimedeltaIndex来添加。<code>.where</code>是<code>if-then</code>的等效成语,但这是一个矢量化表达式。在</p>
<pre><code>In [55]: %timeit s.where(s.dt.weekday==0,pd.TimedeltaIndex(7-s.dt.weekday,unit='d')+s)
100 loops, best of 3: 9.69 ms per loop
</code></pre>