我有一个庞大的数据库,其中有一些预算转移,当查看总计时,它们会相互抵消。问题是,我似乎无法理解如何删除所有相互抵消的行。下面的数据框作为示例: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']) Test0 1050.771 13.452 6.263 -1050.774 100275 6.266 13.457 13.458 -13.459 -6.2610 -1680011 16800上面的总和是 10060.16如您所见,以下数字相互抵消:0 1050.773 -1050.771 13.458 -13.452 6.269 -6.2610 -1680011 16800因此,期望的输出是: Test4 100275 6.266 13.457 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,所以它带有一些浮点数任何有关如何编程的帮助将不胜感激。
1 回答
达令说
TA贡献1821条经验 获得超6个赞
您应该避免在迭代列表时修改列表。而是创建一个索引列表以删除它们,然后在您找到它们之后删除它们。另外,为了避免双重丢弃,您需要在找到匹配项时中断并继续过去已标记为丢弃的内容。
import pandas as pd
test = 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]
break
for k in dropped:
test.drop(index = k, inplace = True)
print(test)
添加回答
举报
0/150
提交
取消