根据条件从数据框中删除几行

时间:2021-02-08 06:24:09

标签: python

有些产品不能一起分配(例如产品“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 解决这个问题。

1 个答案:

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