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