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
添加回答
舉報