大家, 我有一个OrderID,如下面第一列所示。在第二列中,我需要根据以下标准随机分配客户ID:
给定相同的OrderID,CustomerID应该相同; CustomerID可以重复1次以上,但由于客户可以多次购买,因此可以限制5次。例如,客户123有两个OrderID:A01和A03。
OrderID CustomerID
A01 123
A01 123
A02 145
A03 123
A02 145
以下是我的尝试,但没有达到我的目的。
np.random.seed(0)
df['CustomerID'] = np.random.randint(100, 999, len(df))
答案 0 :(得分:0)
根据您的语法,我假设您正在使用pandas
(我在您的原始帖子中添加了pandas
标记)。您可以找到更好的方法来实现此目的,但这是一种方法,通过创建一个名为customers
的单独数据框,其中仅包含您的唯一订单ID和每个的随机int,然后将其与原始数据框合并:
如果您从仅包含OrderID
的数据框开始:
import pandas as pd
import numpy as np
# Original df:
>>> df
OrderID
0 A01
1 A01
2 A02
3 A03
4 A02
customers = pd.DataFrame({'OrderID':df['OrderID'].unique(),
'CustomerID':np.random.randint(100,999, len(df['OrderID'].unique()))})
df = df.merge(customers, on='OrderID')
# New df:
>>> df
OrderID CustomerID
0 A01 513
1 A01 513
2 A02 279
3 A02 279
4 A03 655
答案 1 :(得分:0)
试一试
import uuid
order_ids_map = {} # mapping order ids to customer ids
order_ids = ['A01', 'A01', 'A02', 'A03', 'A02']
for order_id in order_ids:
if order_id not in order_ids_map: # create new customer id
customer_id = uuid.uuid4()
order_ids_map[order_id] = customer_id
print str.format('customer id for order id {0} is {1}', order_id, str(customer_id))
# now order_ids_map contains a map between order_ids and customer_ids