我有一个框架,看起来像这样:
x y score
Cat Dog 0.1
Dog Monkey 0.5
Fish Cat 0.2
Cat Fish 0.2
Monkey Dog 0.4
Dog Cat 0.7
基本上,我需要一个新的布尔列来查看所有对和它们的反转,例如(Cat,Dog)和(Dog,Cat),并在一个对的得分大于反转对的得分时分配True,否则分配False。如果相等,则两个对都分配True。即:
x y score bool
Cat Dog 0.1 False # False because Dog,Cat > Cat,Dog
Dog Monkey 0.5 True # True because Dog,Monkey > Monkey, Dog
Fish Cat 0.2 True # True because both have the same score
Cat Fish 0.2 True # ...
Monkey Dog 0.4 False
Dog Cat 0.7 True
我确信我可以通过在行上应用反向过滤器来完成函数,然后返回一个分数检查;然而,这个列表可能很长(n〉100k),时间是一个因素。事实证明这比我想象的要棘手。我想知道是否可以用一个还没有遇到的神奇Pandas函数或滚动窗口以一种更复杂的方式来完成。
注:
1.每一对(x,y)都是唯一的。
1.对于每一对(x,y),正好有一个反转(y,x)。
1.在同一列中,同一类别可以多次出现,例如,Cat在x的此框架中出现两次。
1.评分范围为0 - 1。
框架:
df = pd.DataFrame.from_records(zip(["Cat","Dog","Fish","Cat","Monkey","Dog"], ["Dog","Monkey","Cat","Fish","Dog","Cat"], [0.1,0.5,0.2,0.2,0.4,0.7]),columns=["x","y","score"])
1条答案
按热度按时间a0x5cqrl1#
您可以交换
x
和y
列,合并x/y对,并比较分数与反转分数: