Если дубликат, вернуть соответствующее значение строки в Python Pandas - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь отсортировать столбец Excel, чтобы показать дубликаты почтовых индексов. Если есть дубликат, я пытаюсь заставить панд просматривать один столбец из дублированных почтовых индексов, суммировать значения и создавать новый список с дублированными / суммированными значениями. В настоящее время я могу создать список всех дубликатов, но не знаю, что мне делать дальше. Любая помощь приветствуется, поскольку я новичок в кодировании.

Пример кода ниже:

from collections import Counter

df = pd.read_excel(r'L:\FixedIncomeReport.xlsx')

zip_code = df['Zip']
quantity = df['Quantity']
Pair = list(zip(zip_code, quantity))
dups=[]
zipcount= list(Counter(i[0] for i in Pair).items())


#print(zipcount)
for i in zipcount:
    if i[1] > 1 :
        dups.append(i[0])

def variable(element):
    if (element in dups):
        return True 
    else:
        return False

filtered = filter(variable, (i[0] for i in Pair))


for item in filtered:
    print(item)

    if item in (i[0] for i in Pair):
        print(list(i[1] for i in Pair))

1 Ответ

0 голосов
/ 08 ноября 2019

Таким образом, способ получить информацию о дубликатах в кадре данных pandas - использовать функцию groupby. Вы можете сгруппировать свой фрейм данных по почтовому индексу и подсчитать количество вхождений и одновременно суммировать поле количества.

В приведенном ниже коде я создал простой кадр данных из 10 почтовых индексов с соответствующим количеством. Некоторые почтовые индексы дублируются. Затем код выполняет группировку, фильтрует дублированные почтовые индексы и выводит два списка, которые, я думаю, вам нужны.

    import pandas as pd

    ## create sample dataframe
    df = pd.DataFrame({'Zip':['11111','00000','00001','11001','00000','11100','11111','00110','11011','00010'],
              'Quantity':[3,6,2,6,5,8,9,0,1,4]
              })

    ## group dataframe by Zip, count the number of occurrences and sum the Quantity field
    grouped_df = df.groupby('Zip')['Quantity'].agg(['sum','count']).reset_index()

    ## output the duplicated zipcodes as a dataframe with the number of occurrences and sum of quantity
    duplicated_df = grouped_df[grouped_df['count']>1]
    duplicated_df.columns = ['DuplicateZip','SumOfQuantity','NumOfOccurrences']

    ## output the duplicated zipcodes as a list
    duplicated_zipcodes_list = list(grouped_df[grouped_df['count']>1]['Zip'])

    ## output the sum of quantities for duplicated zipcodes as a list
    duplicated_zipcodes_quantitysum_list = list(grouped_df[grouped_df['count']>1]['sum'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...