<p>您可以按<code>buyer_id</code>分组,然后用<code>np.unique</code>聚合列。然后,您将得到<code>np.ndarrays</code>,其中包含多个日期和项目标识的行。您可以找到<code>isinstance</code>为<code>np.ndarray</code>的行,您将得到bool序列,您可以将其传递给聚合数据帧并找到感兴趣的买家。通过使用获得的<code>buyers</code>过滤原始数据帧,可以用<code>loc</code>填充<code>flag</code>的行:</p>
<pre><code>df_agg = df.groupby('buyer_id')[['date', 'item_id']].agg(np.unique)
df_agg = df_agg.applymap(lambda x: isinstance(x, np.ndarray))
buyers = df_agg[(df_agg['date']) & (df_agg['item_id'])].index
mask = df['buyer_id'].isin(buyers)
df['flag'] = 0
df.loc[mask, 'flag'] = 1
In [124]: df
Out[124]:
buyer_id item_id order_id date flag
0 139 57 387 2015-12-28 1
1 140 9 388 2015-12-28 1
2 140 57 389 2015-12-28 1
3 36 9 390 2015-12-28 0
4 64 49 404 2015-12-29 0
5 146 49 405 2015-12-29 0
6 81 49 406 2015-12-29 0
7 140 80 407 2015-12-30 1
8 139 81 408 2015-12-30 1
</code></pre>
<p>第一步和第二步的输出:</p>
^{pr2}$