назначать магазины клиентам на основе идентификатора магазина в python - PullRequest
2 голосов
/ 24 апреля 2020

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

Входные данные покупателя:

Place u_ID 
NE     NE01
NY     NY02
NJ     NJ09

хранить входные данные:

Place u_ID    store_name
NE     NE01        test1
NE     NE01        test23
NE     NE02        test2
NE     NE05        test3
NE     NE05        test5
NY     NY02        test
NY     NE01        Eg
NJ     NJ09         tt

код, который я использовал:

cus_el= '+'.join(cus_list) if len(cus_list)>1 else cus_list
cus_el=[cus_el] if len(cus_list)>1 else cus_el

store_el= '+'.join(store_list) if len(store_list)>1 else store_list
store_el=[store_el] if len(store_list)>1 else store_el

writer.writerow([place,store_el+cus_el)

, но это дает мне

Place     u_ID               store_name   
NE     NE01+NE02+NE05        test1+test23+test5+test2+test3        
NY     NY02+NE01              test+Eg               
NJ     NJ09                    tt

ожидаемый результат

Place u_ID    store_name1   store_name2    store_name2
NE     NE01        test1     test23            test5
       NE02        test2
       NE05        test3
NY     NY02        test
       NE01         Eg
NJ     NJ09         tt        

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Это должно сделать это

import pandas as pd

df = pd.DataFrame({'Place':['NE', 'NE', 'NE', 'NE', 'NE', 'NE', 'NY', 'NY', 'NJ'],
                   'u_ID':['NE01', 'NE01', 'NE01','NE02', 'NE05', 'NE05', 'NY02', 'NY01', 'NJ09'],
                   'store_name':['test1', 'test23', 'test5','test2', 'test3', 'test5', 'test', 'Eg', 'tt']}) # example dataframe

df['key'] = 1
df['key'] = 'store_name' + df.groupby(['u_ID', 'Place'])['key'].transform('cumsum').astype(str) # create column of the form store_nameX where X incidates the Xth store

df = df.set_index(['Place', 'u_ID', 'key']).unstack() # transpose

df.columns = list(df.columns.droplevel(0))

df
0 голосов
/ 27 апреля 2020

Я не могу комментировать, поэтому я даю свой совет здесь.

Я думаю, что вы можете решить первую часть вашей проблемы с помощью функции pandas groupby.

EX:

# importing pandas as pd 
import pandas as pd     

# First grouping based on "Place" 
# Within each team we are grouping based on "u_ID" 
gkk = df.groupby(['Place', 'u_ID']) 
# Print the first value in each group 
gkk.first() 

Что касается создания магазина # столбцы вы можете использовать часть вашей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...