Возможно, в Python есть другая функция, которую я могу использовать для группировки транзакций клиентов? Допустим, в транзакции содержится определенное слово, и есть несколько транзакций с одинаковым именем, затем сгруппируйте их вместе.

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

temp=tranx.TRANX.fillna("0")
tranx['Activity_2'] = pd.np.where(temp.str.contains("PNP "),"PICKNPAY",
               pd.np.where(temp.str.contains("CHECKERS"), "CHECKERS",
               pd.np.where(temp.str.contains("MRPRICE"), "MRPRICE",
               pd.np.where(temp.str.contains("FOOD LOVER"), "FOODLOVERMARKET",
               pd.np.where(temp.str.contains("DISCHEM"), "DISCHEM",
                pd.np.where(temp.str.contains("DIS-CHEM"), "DISCHEM",           
                pd.np.where(temp.str.contains("OK FOODS"), "OKFOODS",
                pd.np.where(temp.str.contains("DISCHEM"), "DISCHEM",
                pd.np.where(temp.str.contains("FASHION EXPRESS"), "FASHIONEXPRESS",
                pd.np.where(temp.str.contains("MTC"), "MTC",
                pd.np.where(temp.str.contains("TELECOM"), "TELECOM",
                pd.np.where(temp.str.contains("KFC"), "KFC",
                pd.np.where(temp.str.contains("ACKERMANS"), "ACKERMANS",
                pd.np.where(temp.str.contains("SHOPRITE"), "SHOPRITE",
                pd.np.where(temp.str.contains("USAVE"), "SHOPRITE",            
                pd.np.where(temp.str.contains("S/STATION"), "SERVICESTATION",
                pd.np.where(temp.str.contains("SERVICE STATION"), "SERVICESTATION",
                pd.np.where(temp.str.contains("SOULSTICE DAY SPA"), "SOULSTICESPA",
                pd.np.where(temp.str.contains("CLICKS" ), "CLICKS",
                pd.np.where(temp.str.contains("JET "), "JET",
                pd.np.where(temp.str.contains("PEP "), "PEP",           
               pd.np.where(temp.str.contains("WOERMANN"), "WOERMANN", "OTHER"))))))))))))))))))))))

Нет ли способа, где я мог бы создать список, содержащий все продавцы, а затем придумать цикл, который повторяется в каждой строке, чтобы определить, появляется ли имя продавца в этой строке, тогда ЕСЛИ ДА ВЫХОДНОЕ ИМЯ ТОВАРА, ЕСЛИ НЕТ КЛАССИФИЦИРОВАТЬ СДЕЛКУ КАК ДРУГОЕ?

Ниже приведен образец данных:

Transactions Sample

0
Ligamena 19 Авг 2019 в 13:47

2 ответа

Лучший ответ

Попробуй это,

list_names = ['PNP','CHECKERS'..]
mapping = ['PICKNPAY', 'CHECKERS' ..]
for i,item in enumerate(list_names):
    trax.loc[trax['Activity_2'].str.contains(item), 'Activity_2'] = mapping[i] 

#replaces inplace
0
Hima 19 Авг 2019 в 11:15

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

lst = ['PNP', 'JET'...]
for i in lst:
if df['Name'].str.contains[i]:     #same as your temp
    df['Short_Name'] = i

Если у вас есть разные имена, которые вы хотите присвоить каждой строке, вы можете создать другой список, содержащий «Short_Name» («PNP») и другие имена («PICKNPAY»), и объединить два кадра данных.

0
clide 19 Авг 2019 в 11:07