Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有一种快速的方法可以在数据帧中找到负副本?_Python_Pandas_Duplicates - Fatal编程技术网

Python 有没有一种快速的方法可以在数据帧中找到负副本?

Python 有没有一种快速的方法可以在数据帧中找到负副本?,python,pandas,duplicates,Python,Pandas,Duplicates,嗨,堆栈溢出的聪明人, 我正在寻找一种快速的方法来标记160000行数据帧中的所有行对,它们是彼此的负对应项 数据帧示例: import pandas as pd df = pd.DataFrame({'A': ['a','b','c','b','c','d','b'], 'B': ['x','y','x','y','x','z','y'], 'C': [-1.23, 1.2, 9.8, -1.2, -9.8, 1.2

嗨,堆栈溢出的聪明人, 我正在寻找一种快速的方法来标记160000行数据帧中的所有行对,它们是彼此的负对应项

数据帧示例:

import pandas as pd

df = pd.DataFrame({'A': ['a','b','c','b','c','d','b'],
                   'B': ['x','y','x','y','x','z','y'],
                   'C': [-1.23, 1.2, 9.8, -1.2, -9.8, 1.23, -1.2]})
索引为1和3的行应标记为一对,索引为2和4的行也应标记为一对。我严格地寻找匹配对,因此,例如索引6不应该与1和3一起标记,并且任何索引都不能被多次标记

所需输出应为:

pairlist = [1,3,2,4]
我尝试过使用itertuples(),但速度很慢:

pairlist = []
for row in df.itertuples():
    if row.C < 0 and row.Index not in pairlist:
        found = df.loc[(df['A'] == row.A) & (df['B'] == row.B) & (df['C'] == -1*row.C)].index.tolist()
        if len(found)>0:
            for f in found:
                if f not in pairlist:
                    pairlist.append(row.Index)
                    pairlist.append(f)
                    break
pairlist=[]
对于df.itertuples()中的行:
如果行C<0且行索引不在成对列表中:
found=df.loc[(df['A']==row.A)&(df['B']==row.B)&(df['C']==1*row.C)]。index.tolist()
如果len(找到)>0:
对于在中找到的f:
如果f不在配对列表中:
pairlist.append(row.Index)
pairlist.append(f)
打破

有没有办法以矢量化的方式实现这一点?

对于您的情况,让我们用
过滤器进行
变换
求和

s=df.groupby(['A','B']).C.transform('sum').eq(0)
df=df[s]

df.groupby(['A','B']).groups.values()
Out[32]: dict_values([Int64Index([1, 3], dtype='int64'), Int64Index([2, 4], dtype='int64')])

你考虑过分类吗?(排序后,第一行与最后一行匹配等)抱歉,我没有将索引为6的行添加到原始df中。我刚刚更新了它,见OP。