У меня есть набор данных, который является идентификатором продукта и список из 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