擅长:python、mysql、java
<p>Numpy解决方案。使用广播比较,然后沿第一个轴执行<code>cumsum</code>操作。最后,提取对角线元素并赋给<code>df</code></p>
<pre><code>v = (df.invoice_date[:, None] > df.payment_date.values).cumsum(1)
df['num_pay_dates_less_than_inv_date'] = v[np.diag_indices_from(v)]
</code></pre>
<p/>
<pre><code>df
id invoice_date payment_date num_pay_dates_less_than_inv_date
0 1 2017-03-01 2017-03-03 0
1 1 2017-03-04 2017-03-06 1
2 1 2017-03-04 2017-03-11 1
3 1 2017-03-15 2017-03-16 3
4 1 2017-03-21 2017-03-31 4
5 2 2017-01-22 2017-01-22 0
6 2 2017-01-24 2017-01-25 1
</code></pre>
<p>这要求两个列都采用datetime格式(否则,比较是按字典顺序进行的,这通常是可以的,但此时将取决于您的日期格式)</p>