有些产品不能一起分配(例如产品“5649565”和“5649646”不能一起分配给任何客户)。您可以在排除表中获取此列表:
product1 | product2 |
---|---|
5649646 | 5649565 |
5649585 | 5649910 |
5649585 | 5649921 |
5649607 | 5649931 |
5649607 | 5649929 |
df_customers:
客户 | 产品 | relevancy_score |
---|---|---|
A10001 | 5649646 | 0.646916 |
A10001 | 5649565 | 0.608653 |
A10001 | 5649585 | 0.587336 |
A10001 | 5649910 | 0.581182 |
A10001 | 5650462 | 0.575269 |
A10787 | 5650544 | 0.008170 |
A10787 | 5649815 | 0.003877 |
A10787 | 5649925 | 0.002392 |
即客户 A10001 应该只获得其中一种产品,而不是同一指数的两种产品,例如客户 A10001 应该获得 5649646 或 5649565 但不能同时获得两者。但是我们可以在 df_customers 表中看到他同时获得了这两种产品,因此我必须删除具有 A10001 客户的产品 5649565 的行。我该如何用 python 解决这个问题。
答案 0 :(得分:0)
目前尚不清楚应优先考虑哪种产品。 relevancy_score
最高的那个还是产品 1 超过产品 2?
例如,这里有一个更喜欢更高 relevancy_score
的解决方案。
import pandas as pd
df = pd.DataFrame({
'customers': [1, 1, 1, 2, 2, 3, 3, 3],
'product': ['a', 'b', 'c', 'c', 'a', 'b', 'a', 'c'],
'relevancy_score': [0.5, 0.9, 0.1, 0.95, 0.3, 0.5, 0.8, 0.4],
})
new_df = pd.concat(
[
group[group['relevancy_score'] == group['relevancy_score'].max()]
for _, group in df.groupby('customers')
]
)
print(new_df)
输出
customers product relevancy_score
1 1 b 0.90
3 2 c 0.95
6 3 a 0.80