Python / Pandas: идентификация продуктов как массовых, так и массовых - PullRequest
0 голосов
/ 14 марта 2019

У меня есть набор данных, который является идентификатором продукта и список из 7 магазинов. В магазинах есть цены на товар. Некоторые продукты представляют собой отдельные продукты (1 единица товара), а некоторые являются большими (несколько единиц одного и того же продукта), и, следовательно, имеют общий идентификатор. Я хочу отделить массовые предметы от отдельных предметов. Я хочу заменить массовые элементы на ноль (0) в исходном фрейме данных, а также создать новый фрейм данных, который содержит подмножество массовых элементов. Я пытался использовать принципы CLT и IQR для дифференциации, но проблема в том, что среднее значение меняется. Невозможно использовать медиану, потому что в некоторых строках есть только две цены одного товара и 5 оптовых цен.

Пример массового товара: Отдельный предмет Пара носков - Цена 12 Массовая вещь 6 * Пара носков - Цена 68 $

Используемые методы: пробовал использовать словарь слов с синонимами, такими как коробка, коробка и т. Д., Но данные были грязными. В большинстве случаев ключевые слова отсутствуют, поскольку данные отбрасываются. Нужно смотреть на ценовые классификации. Я тоже попробовал IQR, но не классифицировал большую часть из одинарных. Я думал, можем ли мы взглянуть на процентное изменение цены между различными магазинами, а затем установить динамический порог. Пробовал, но безуспешно. Буду признателен за любую помощь, поскольку я пытаюсь научиться спорить, и это трудные данные, с которыми я столкнулся. PS: есть 400000 строк, поэтому нельзя жестко закодировать пороговое значение, поскольку продукты имеют диапазон от 10RS до 10000RS.

Код для данных:

import pandas as pd
data = [[123,30,32,46,39,49,120,140],[246,15,16,45,15,11,12,18],[234,10,15,18,14,12,70,65],[236,20,29,31,100,24,110,30]]
df = pd.DataFrame(data,columns=['ID','HandM','flipkart','levis','jockey','bigbazar','polo','shooperstop'])
print (df)

Код для расчетов IQR:

df.iloc[:, 1:7]

df['min_value'] = df.iloc[:, 1:7].min(axis=1)

df['max_value'] = df.iloc[:, 1:7].max(axis=1)

df['AVG_value'] = df.iloc[:, 1:7].mean(axis=1)

df['Q1'] =  df.iloc[:, 1:7].apply(lambda x: np.percentile(x, 25), axis=1)

df['Q3'] =  df.iloc[:, 1:7].apply(lambda x: np.percentile(x, 75), axis=1)

df['IQR'] = df['Q3']-df['Q1']

df.head()

df['Lower_limit'] = df['Q1'] - (1.5 * df['IQR'])

df['Upper_limit'] = df['Q3'] + (1.5 * df['IQR'])

Требуемый вывод указан ниже:

Исходный кадр данных:

ID  HandM   flipkart    levis   jockey  bigbazar    polo    shooperstop
123 30  32      46  39  49      0   0       
246 15  16      45  15  11      12  18      
234 10  15      18  14  12      0   0       
236 20  29      31  0   24      0   30  

Новый (BUlk) фрейм данных:

ID  HandM   flipkart    levis   jockey  bigbazar    polo    shooperstop
123 30  32      46  39  49      0   0               
234 10  15      18  14  12      0   0       
236 20  29      31  0   24      0   30      
...