获取列中所有重复元素的索引,给定的顺序。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取列中所有重复元素的索引,给定的顺序。相关的知识,希望对你有一定的参考价值。

我有一个数据框架,如。

                Price   Ticket
Id                            
505          86.5000  110152           
258          86.5000  110152           
760          86.5000  110152           
263          79.6500  110413           
559          79.6500  110413           
586          79.6500  110413           
111          52.0000  110465           
476          52.0000  110465           
431          26.5500  110564           
367          75.2500  110813           
171          33.5000  111240

我想在字典中填入:-键:我们枚举dict中的键数(本例中从1到3)-值: 'Id'(也就是索引)。

对于这个例子,我将得到这样的结果。{'1': ['505', '258', '260'], '2':['263', '559', '586'], '3':['111','476']}

数据框已经按'Ticket'列排序,我希望它保持这种方式。为什么呢?我希望能够使用字典和数据框架(仍然按照'Ticket'排序)来找出dict中的任何ID是否与数据框架中其他地方的名称序列相关联。

我写了下面的代码,但我得到了下面的Error:'IndexError: single positional indexer is out-of-bound'。

def same_price(df=df):
    df= df.sort_values(by='Ticket')
    nucleus= dict()
    k=0
    while df.shape[0]>=2:
        if df.Price.iloc[0]==df.Price.iloc[1]:
            value= df.Price.iloc[0]
            n=0
            nucleus[k]= []
            while df.Price.iloc[n]==value:
                nucleus[k].append(df.index[n])
                n+=1
                if n>df.shape[0]:
                    df.drop(nucleus[k], axis=0, inplace=True)
                    break 
            else:
                df.drop(nucleus[k], axis=0, inplace=True)
                k+=1       
        else:
            if df.shape[0]>=3: 
                df.drop(df.index[0], axis=0, inplace=True)
            else:
                break
    return(nucleus)

鉴于这个错误,我相信我调用了一个空列表的第一个元素。但我无法解决这个问题。 我想保留这个函数(并升级它),请大家:)

答案

你可以尝试用以下方法过滤 series.duplicated()groupby+agg

(df[df['Price'].duplicated(keep=False)].reset_index()
.groupby('Price',sort=False)['Id'].agg(list).to_dict())

#{86.5: [505, 258, 760], 79.65: [263, 559, 586], 52.0: [111, 476]}

以上是关于获取列中所有重复元素的索引,给定的顺序。的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:获取重复的索引

使用Python以相同的顺序获取列表的所有子列表[重复]

如何查找列表中所有唯一元素的所有索引[重复]

算法:按字典顺序在给定索引处查找给定字符串的字谜

熊猫计算列中的元素并以重复的方式显示

查找 NSArray 中所有重复元素的索引