删除重复的反向对

问题描述 投票:1回答:1

鉴于Pandas Dataframe如下:

   value_1  value_2
0    b     a
1    a     b
2    c     d
3    d     c

尽管有秩序,但我想计算每对发生多少次。换句话说,a,b等于b,a。我发现了一些情况,比如that,但在这种情况下,预计某些值只出现在一列中。

首先,我尝试类似的东西:

pd.crosstab(df.value_1,df.value_2).replace(0,np.nan).\
     stack().reset_index().rename(columns={0:'Frequency'})

通过这种方法我也无法删除重复项考虑到(a,b == b, a)的顺序

然后我假设像[(a,b), (b,a), (c,d), (d,c)]这样的列表的情况,所以我创建了一个函数,只根据它们的元素返回单对:

from itertools import combinations

def get_unique_pairs(pairs):
    unique_pairs = []
    for pair in combinations(pairs, 2):
        if Counter(pair[0]) == Counter(pair[1]):
            unordered_pair = set(list(pair[0]+pair[1]))
            unique_pairs.append(unordered_pair)
    return {(tuple(e)) for e in unique_pairs}

他们对[(a,b), (b,a), (c,d), (d,c)]的输出是{(a,b), (c,d)}

但是,对于大型数据帧来说,这是不可行的。

最后,对于上述数据帧,预期输出为:

   pair frequency
0    b; a   2      
1    c; d   2
python-3.x pandas
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.