1 回答

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊
使用groupby和cumcount獲取后綴,然后使用np.where有條件地設(shè)置它們。
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
如果您對(duì) 2 和 4 也有后綴沒(méi)問(wèn)題,那么一個(gè)稍微簡(jiǎn)單的解決方案;您可以使用groupby和cumcount來(lái)生成后綴,然后使用str.cat來(lái)連接它們。
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
添加回答
舉報(bào)