我有一个如下结构的数据框架:
df = pd.DataFrame({'ID':['A001', 'A001', 'A001', 'A002', 'A002', 'A003', 'A003', 'A004', 'A004', 'A004', 'A005', 'A005'],
'Val1':[2, 2, 2, 5, 6, 8, 8, 3, 3, 3, 7, 7],
'Val2':[100, -100, 50, -40, 40, 60, -50, 10, -10, 10, 15, 15]})
ID Val1 Val2
0 A001 2 100
1 A001 2 -100
2 A001 2 50
3 A002 5 -40
4 A002 6 40
5 A003 8 60
6 A003 8 -50
7 A004 3 10
8 A004 3 -10
9 A004 3 10
10 A005 7 15
11 A005 7 15
我想删除重复的行,其中ID和Val1是重复的,Val2在两行中的总和为零。正/负Val2行也可能不是连续的,即使在groupby
下也是如此
在上面的示例数据中,行0和1以及7、8、9满足这些标准。我想删除[0,1],并删除[7,8]或[8,9]
这里的另一个限制是可能存在完全重复的行([10,11])。在本例中,我希望保留两行
因此,期望输出为:
ID Val1 Val2
2 A001 2 50
3 A002 5 -40
4 A002 6 40
5 A003 8 60
6 A003 8 -50
9 A004 3 10
10 A005 7 15
11 A005 7 15
除了迭代每一行并寻找符合条件的其他行之外,我没有更“pythonic”的方法来实现这一点。非常感谢您的帮助
我在代码中添加了一些注释,因此希望我的思路应该是明确的:
那么:
但这个答案指的是你的“文本”答案:第8行&;9‘Val2’实际上等于零(这不是您发布的“期望输出”
使用
groupby
和cumsum
查找Val2
的哪个索引和为零相关问题 更多 >
编程相关推荐