有没有一种快速的方法可以在Pandas DataFrame中查找阴性对应副本?

问题描述

您好,Stack Overflow的人, 我正在寻找一种标记16万行熊猫数据框中所有成对彼此为负的快速方法

示例数据框:

import pandas as pd

df = pd.DataFrame({'A': ['a','b','c','d','b'],'B': ['x','y','x','z','y'],'C': [-1.23,1.2,9.8,-1.2,-9.8,1.23,-1.2]})

索引为1和3的行应标记为一对,索引2和4也应标记为一对。我严格地希望与PAirs匹配,例如,索引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

以矢量化方式执行此操作的任何方式?

解决方法

对于您的情况,让transformfilter相加

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')])