<p>尝试<a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_values.html#pandas-dataframe-sort-values" rel="nofollow noreferrer">^{<cd1>}</a>确保合同的顺序正确+<a href="https://pandas.pydata.org/docs/reference/api/pandas.core.groupby.GroupBy.cumcount.html#pandas-core-groupby-groupby-cumcount" rel="nofollow noreferrer">^{<cd2>}</a>以获取每个订单号,然后<a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.map.html#pandas-series-map" rel="nofollow noreferrer">^{<cd3>}</a>或<a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.apply.html#pandas-series-apply" rel="nofollow noreferrer">^{<cd4>}</a>使用函数将数字转换为所需的字符串值:</p>
<pre><code>def format_order(n):
if n == 0:
return 'Original'
suffix = ['th', 'st', 'nd', 'rd', 'th'][min(n % 10, 4)]
if 11 <= (n % 100) <= 13:
suffix = 'th'
return str(n) + suffix
df = df.sort_values(['account_id', 'date_activated']).reset_index(drop=True)
# apply
df['Renewal Order'] = df.groupby('account_id').cumcount().apply(format_order)
</code></pre>
<p>或</p>
<pre><code>df = df.sort_values(['account_id', 'date_activated']).reset_index(drop=True)
# map
df['Renewal Order'] = df.groupby('account_id').cumcount().map(format_order)
</code></pre>
<pre class="lang-none prettyprint-override"><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>