在熊猫的DataFrame中删除相互抵消的数字

我有一个庞大的数据库,其中有一些预算转移,当查看总计时,它们会相互抵消。问题是,我似乎无法理解如何删除所有相互抵消的行。下面的数据框作为示例:


test = pd.DataFrame(data = [1050.77, 13.45, 6.26, -1050.77, 10027, 6.26, 13.45, 13.45, -13.45, -6.26, -16800, 16800], columns = ['Test'])


    Test

0   1050.77

1   13.45

2   6.26

3   -1050.77

4   10027

5   6.26

6   13.45

7   13.45

8   -13.45

9   -6.26

10  -16800

11  16800


上面的总和是 10060.16


如您所见,以下数字相互抵消:


0   1050.77

3   -1050.77


1   13.45

8   -13.45


2   6.26

9   -6.26


10  -16800

11  16800

因此,期望的输出是:


   Test

4   10027

5   6.26

6   13.45

7   13.45

当然,上面的总和是 10060.16。


我已经尝试了很多东西,但我无法让它工作。下面的代码是我所做的尝试之一,但它不起作用:


for idx1, i in enumerate(test['Test']):

    for idx2, j in enumerate(test['Test']):

        if (i + j == 0):

            test.drop(index = idx1, inplace = True)

            test.drop(index = idx2, inplace = True)            

test

我可以删除取消另一个的号码,然后使用 dropna 消除空行,或者最好的结果是删除该号码具有“取消器”的整行


我不关心索引,它可以以任何方式更改。


目标是仅消除 + 和 - 数字的完美匹配。


编辑:我已经编辑了 DataFrame,所以它带有一些浮点数


任何有关如何编程的帮助将不胜感激。


繁星点点滴滴
浏览 81回答 1
1回答

达令说

您应该避免在迭代列表时修改列表。而是创建一个索引列表以删除它们,然后在您找到它们之后删除它们。另外,为了避免双重丢弃,您需要在找到匹配项时中断并继续过去已标记为丢弃的内容。import pandas as pdtest = pd.DataFrame(data = [3, 2, -4, 2, -3, 3, 2, 6, 7, 5, -6, 6, 3, 3, 4, 4], columns = ['Test'])dropped = []for idx1, i in enumerate(test['Test']):    if idx1 in dropped:        continue    for idx2, j in enumerate(test['Test']):        if idx2 in dropped or idx1 == idx2:            continue        if (i + j == 0):            dropped += [idx1,idx2]            breakfor k in dropped:    test.drop(index = k, inplace = True)print(test)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python