我有如下数据集。如果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的所有值。

08-19 22:41