Pandas Groupby с функцией, объединяющей аналогичный индекс - PullRequest
0 голосов
/ 30 ноября 2018

Я использую Pandas groupby для анализа данных клиента, но не указан идентификатор клиента.Поэтому я должен сгруппировать имя клиента, но некоторые похожие имена клиентов на самом деле совпадают.Я хочу использовать функцию, которая может объединять одинаковые имена клиентов с одинаковыми первыми пятью символами, точно так же, но с изменением имени индекса, которое я впервые публикую, спасибо!


********* ОБНОВЛЕНИЕ ************* Я пытался сначала получить правильный список имен.и используйте метод dataframe.apply для исправления col ['FHRMC'], но мои данные - около 150 000+ строк и список имен - около 2500+, я запускаю этот сценарий без ошибок, а также часы работы без результата.часть моего кода ниже:

def groupData(path):

    df = pd.read_csv(path,error_bad_lines=False)

    list_raw_FHRMC =list(df.groupby(df['ZKFHRMC']),'ZKRKRQ0'].indices.keys()) 

    deduped_list = deduped_FHRMC(list_raw_FHRMC)


 **grouped_data.apply(correct_FHRMC,nameList=deduped_list,axis=1).groupby(df['ZKFHRMC'])['ZKJF001','ZKZZL00','ZKZLC00','ZKRKRQ0']**

что-то не так с этой строкой ↑

    concated_data = concateValueF_and_A(grouped_data)

    return concated_data


def deduped_FHRMC(nameList):  # I want to use this func to get a namelist

    for name in nameList:
        if nameList.index(name) == len(nameList)-1:
            break
        if len(name) == 3 or len(name) == 2:
            if len(name) == 3 and name[:3] == nameList[nameList.index(name)+1][:3]:  #3个字的人名
                nameList.pop(nameList.index(name)+1)
            if name[:2] == nameList[nameList.index(name)+1][:2]:  #2个字的人名
                nameList.pop(nameList.index(name)+1)
        else:
            if name[:5] == nameList[nameList.index(name)+1][:5]:  #5个字的发货人,通常会是公司名称
                nameList.pop(nameList.index(name)+1)
    return nameList


def correct_FHRMC(r,nameList): #更正发货人名称
    for name in nameList:
        if name[:5] in r['ZKFHRMC']:
            r['ZKFHRMC'] = name
    return r

1 Ответ

0 голосов
/ 01 декабря 2018

Одним из решений является добавление столбца в ваш DataFrame с ключом groupby, а затем использование столбца для выполнения groupby.

В вашем сценарии вы применяете лямбду к столбцу A. Затем groupby нарезультат.Что-то вроде:

df["C"] = df["A"].map(lambda x: x[0:5])
df.groupby("C")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...