1 回答
TA贡献1779条经验 获得超6个赞
使用groupby和cumcount获取后缀,然后使用np.where有条件地设置它们。
c = df.groupby('order_id').cumcount() // 3
m = (c == 0).groupby(df.order_id).transform('all')
df['order_id2'] = (
np.where(m, df.order_id, df.order_id.astype(str) + '-' + c.astype(str))
.astype(str))
df.head(10)
order_id order_id2
0 1 1-0
1 1 1-0
2 1 1-0
3 1 1-1
4 1 1-1
5 1 1-1
6 1 1-2
7 2 2
8 2 2
9 2 2
如果您对 2 和 4 也有后缀没问题,那么一个稍微简单的解决方案;您可以使用groupby和cumcount来生成后缀,然后使用str.cat来连接它们。
c = (df.groupby('order_id').cumcount() // 3).astype(str)
df['order_id3'] = df['order_id'].astype(str).str.cat(c, sep='-')
df.head(10)
order_id order_id2 order_id3
0 1 1-0 1-0
1 1 1-0 1-0
2 1 1-0 1-0
3 1 1-1 1-1
4 1 1-1 1-1
5 1 1-1 1-1
6 1 1-2 1-2
7 2 2 2-0
8 2 2 2-0
9 2 2 2-0
添加回答
举报