删除重复项并过滤数据框

时间:2019-07-02 14:31:23

标签: python pandas dataframe

我正在开发一个模拟器,该模拟器具有一个市场,供应商可以在该市场进行报价,而消费者可以出价。这个概念很简单。

基于消费者和提供者的要约和偏好,我创建了一个数据框,该数据框按消费者偏好和提供者要约之间的欧几里得距离排序,以最大限度地提高消费者效用。这是一个示例:(最后一列不是数据框的一部分)

   consumerId providerId capacity     price   quality  distance
9        1003       2001        1  0.815317  0.814237  0.769884  <-
4        1002       2001        1  0.815317  0.814237  0.586566  dup p,q
8        1003       2000        1  0.278722  0.064698  0.551566  dup Id
14       1003       2002        1  0.342255  0.069247  0.488291  dup Id
6        1003       2000        1  0.710141  0.503366  0.474249  dup Id
12       1003       2002        1  0.386136  0.062411  0.444144  dup Id
20       1005       2001        1  0.815317  0.814237  0.402990  dup p,q
13       1003       2002        1  0.467643  0.073472  0.363433  dup Id
15       1003       2002        1  0.527181  0.192858  0.337139  dup Id
21       1005       2002        1  0.951580  0.761860  0.319450  <-
7        1003       2000        1  0.611682  0.267618  0.312109  dup Id
1        1002       2000        1  0.710141  0.503366  0.310783  <-
5        1003       2000        1  0.725587  0.334001  0.307735  dup Id
17       1004       2000        1  0.710141  0.503366  0.305369  dup p,q
19       1005       2000        1  0.710141  0.503366  0.269010  dup Id
2        1002       2000        1  0.611682  0.267618  0.247648  dup Id
10       1003       2001        1  0.619495  0.082655  0.213857  dup Id
11       1003       2001        1  0.654035  0.163907  0.212591  dup Id
18       1004       2000        1  0.611682  0.267618  0.205169  <-
3        1002       2000        1  0.843739  0.410850  0.182180  dup Id
0        1002       2000        1  0.725587  0.334001  0.167611  dup Id
16       1004       2000        1  0.725587  0.334001  0.146053  dup Id
22       1009       2000        1  0.710141  0.503366  0.071535  dup p,q

消费者只能购买一项优惠。优惠只能购买一次。我需要从上面的数据框中删除重复项,结果如下:

   consumerId providerId capacity     price   quality  distance
9        1003       2001        1  0.815317  0.814237  0.769884
21       1005       2002        1  0.951580  0.761860  0.319450
3        1002       2000        1  0.843739  0.410850  0.182180
18       1004       2000        1  0.611682  0.267618  0.205169

与之最接近的方法是使用df.drop_duplicates(subset=['price', 'quality'], keep='first'),然后使用相同的方法删除重复的consumerId

但是,此方法不包括最后一行
18 1004 2000 1 0.611682 0.267618 0.205169
,因为该提议将从第一次重复操作中删除。

完成此过滤的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

因此,我通过创建一个新的数据框,遍历每一行,添加到新的df以及在每个步骤中进行重复数据删除来解决我的问题:

df = pd.DataFrame()
    for idx, row in offers.iterrows():
        df = df.append(row)
        df = df.drop_duplicates(subset=['consumerId'], keep='first')
        df = df.drop_duplicates(subset=['price', 'quality'], keep='first')