我有如下数据集。如果cancel为“Y”,则美元为负,反之亦然。
从数据中,我想删除在相同id中具有相同美元符号但符号不同(当然,取消值应有不同符号)的货币对。
df
rownumber id1 cancel dollar
1 1 Y -50
2 1 N 10
3 1 N 50
4 2 N 14.4
5 2 Y -23.5
6 2 N 23.5
7 3 Y -15.5
8 3 N 15.5
9 4 Y -20.5
因此,这是我想要的输出。
df_desired
rownumber id1 cancel dollar
2 1 N 10
4 2 N 14.4
9 4 Y -20.5
可能我可以通过使用for循环来做到这一点,但是数据太大而无法做到这一点。
有什么简单的方法吗?
最佳答案
由于iff cancel = Y
带有负号,为什么不简单地将绝对值存储在dollar
中呢?然后,您可以仅对具有“取消+美元”值的行进行取值。过滤后,如果需要,可以添加负号。
如果由于某种原因这不是一个选择,那么如果您有足够的内存来从数据中构建哈希集,那么仍然可以在O(2)时间内执行此操作:对于每一行,将dollar
插入哈希集。然后再次进行迭代,并过滤掉您的哈希集包含-dollar
的所有值。