<p>我们可以首先通过分组<code>account_id</code>找到<a href="https://pandas.pydata.org/docs/reference/api/pandas.core.groupby.GroupBy.cumcount.html" rel="nofollow noreferrer">cumcount</a>,然后使用<a href="https://numpy.org/doc/stable/reference/generated/numpy.select.html" rel="nofollow noreferrer">np.select</a>我们可以提供条件if<code>Renewal Order is 0 then replace it with Original</code>和以下条件。<br/>
我们可以将其扩展到<code>3rd, 4th and so on</code>。<br/>
如果我们需要任何默认值,我还设置了一个条件<code>default=unorignal</code></p>
<p><strong>代码</strong></p>
<pre><code>df = df.sort_values(['account_id', 'date_activated']).reset_index(drop=True)
df['Renewal Order'] = df.groupby('account_id').cumcount()
conditions = [
df['Renewal Order']==0,
df['Renewal Order']==1,
df['Renewal Order']==2
]
choices = ['Original', '1st', '2nd']
df['Renewal Order'] = np.select(conditions, choices, default='unOriginal') ## remove default if not required
df
</code></pre>
<p><strong>输出</strong></p>
<pre><code>account_id contract_id date_activated Renewal Order
0 1 ADS 2020-12-12 Original
1 1 AAA 2021-01-05 1st
2 1 ADGD 2021-02-03 2nd
3 2 HHA 2021-03-05 Original
4 2 HAKD 2021-03-06 1st
5 3 HADSA 2021-05-01 Original
</code></pre>