Возможно, в 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"))))))))))))))))))))))
Нет ли способа, где я мог бы создать список, содержащий все продавцы, а затем придумать цикл, который повторяется в каждой строке, чтобы определить, появляется ли имя продавца в этой строке, тогда ЕСЛИ ДА ВЫХОДНОЕ ИМЯ ТОВАРА, ЕСЛИ НЕТ КЛАССИФИЦИРОВАТЬ СДЕЛКУ КАК ДРУГОЕ?
Ниже приведен образец данных:
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
Я полагаю, что вы можете создать список, который содержит имя и использовать цикл для цикла в каждом из них.
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»), и объединить два кадра данных.
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.