Python Pandas 数据帧 - 优化在另一个数据帧中搜索 id



给出了以下场景。

我有 2 个称为订单和客户的数据帧。

我想查看订单数据帧中的客户 ID 在客户数据帧的"链接客户"列中的位置。"链接客户"字段是一组客户 ID。

订单数据帧包含大约 5.800.000 个项目。 客户数据帧包含大约 180,000 个项目。

我正在寻找一种优化以下代码的方法,因为此代码运行但速度非常慢。我怎样才能加快速度?


# demo data -- In the real scenario this data was read from csv-/json files.
orders = pd.DataFrame({'custId': [1, 2, 3, 4], 'orderId': [2,3,4,5]})
customers = pd.DataFrame({'id':[5,6,7], 'linkedCustomers': [{1,2}, {4,5,6}, {3, 7, 8, 9}]})

def getMergeCustomerID(row):
customerOrderId = row['custId']
searchMasterCustomer = customers[customers['linkedCustomers'].str.contains(str(customerOrderId))]
searchMasterCustomer = searchMasterCustomer['id'] 
if len(searchMasterCustomer) > 0:      
return searchMasterCustomer
else:
return customerOrderId
orders['newId'] = orders.apply(lambda x: getMergeCustomerID(x), axis=1)

# expected result
custId  orderId  newId
1        2        5
2        3        5
3        4        7
4        5        6

我认为在某些情况下这种方法可以解决您的问题: 先建字典,

myDict = {}
for i,j in customers.iterrows():
for j2 in j[1]:
myDict[j2]=j[0]

然后使用字典创建新列:

orders['newId'] = [myDict[i] for i in orders['custId']]

IMO 即使这可以解决您的问题(加快您的程序(,但这不是最通用的解决方案。欢迎更好的答案!

最新更新