我正在开发一个模拟器,该模拟器具有一个市场,供应商可以在该市场进行报价,而消费者可以出价。这个概念很简单。
基于消费者和提供者的要约和偏好,我创建了一个数据框,该数据框按消费者偏好和提供者要约之间的欧几里得距离排序,以最大限度地提高消费者效用。这是一个示例:(最后一列不是数据框的一部分)
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
,因为该提议将从第一次重复操作中删除。
完成此过滤的最佳方法是什么?
答案 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')