python随便的customerID

时间:2018-03-26 15:33:17

标签: python pandas random

大家, 我有一个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))

2 个答案:

答案 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