擅长:python、mysql、java
<p>因为您的计算需要排序,所以我们可以避免分组。排序,获取行差,并使用跨组的值<code>where</code>到<code>NaN</code>(即每个ID的最早行)。因为您希望第一个差异是相对于<code>'2020-12-15'</code>的,所以我们可以使用<code>fillna</code>查找与该日期的差异,并使用<code>np.where</code>根据您的条件为字符串赋值</p>
<pre><code>import pandas as pd
import numpy as np
df['timestamp'] = pd.to_datetime(df['timestamp'])
df = df.sort_values(['id', 'timestamp'])
s = (df['timestamp'].diff()
.where(df['id'].eq(df['id'].shift()))
.fillna(df['timestamp'] - pd.to_datetime('2020-12-15')))
#0 1 days
#1 1 days
#2 14 days
#3 31 days
#4 0 days
#5 1 days
df['outcome'] = np.where(s <= pd.Timedelta(25, 'D'), 'yes', 'no')
# timestamp value id outcome
#0 2020-12-16 25 1 yes
#1 2020-12-17 45 1 yes
#2 2020-12-31 40 1 yes
#3 2021-01-31 37 1 no
#4 2020-12-15 12 2 yes
#5 2020-12-16 78 2 yes
</code></pre>