Группируйте артикулы вместе на основе сходства ЦЕН - PullRequest
0 голосов
/ 28 мая 2020
SKU_NUM       GEO_CD    GROUP_ID    PRICE   EXPECTED_OUTPUT
70907334        SV      1198094     0.84        5
70073557        SV      1198094     1.08        1
70073797        SV      1198094     1.20        1
70394170        SV      1198094     1.20        1
70395532        SV      1198094     1.20        1
70325533        SV      1198094     1.32        1
70393532        SV      1198094     1.38        4
70428444        CR      1198094     8.07        1
70428459        CR      1198094     8.07        1
70428536        CR      1198094     8.07        1
70424536        CR      1198094     7.97        1
70221536        CR      1198094     7.97        1
70428532        CR      1198094     7.52        2
70009265        CR      1198094     8.85        1
70009266        CR      1198094     8.85        1
70079602        CR      1198094     8.85        1
70079853        CR      1198094     8.85        1
70340656        CR      1198094     8.85        1
70340665        CR      1198094     8.85        1
70340325        CR      1198094     9.74        1
70343265        CR      1198094     10.18       3
70320665        CR      1198094     9.56        1
70548879        NI      1198094     23.81       6
70548879        NI      1198094     26.78       1
70271547        NI      1198094     29.76       1
70271547        NI      1198094     29.76       1
70271547        NI      1198094     32.74       1
70271547        NI      1198094     35.71       7

Я пытаюсь сгруппировать артикулы с похожими ценами (+ - 10% от режима). Каждый GEO_CD имеет свой собственный РЕЖИМ, и поэтому, если ЦЕНА SKU находится в диапазоне + -10% от РЕЖИМА, я хотел бы сгруппировать их вместе и назначить их в группу EXPECTED_OUTPUT = 1, если не назначать им никаких другой номер. Точно так же для всех GEO_CD, если цена SKU находится в пределах + -10% от их соответствующего РЕЖИМА, я бы отнес их к группе 1, а если бы не поместил их в любую другую группу, кроме 1.

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

1 Ответ

0 голосов
/ 28 мая 2020

Можно примерно так, я взял режим ЦЕНА:

mode = float(df['PRICE'].mode())
df['within_mode'] = abs((df['PRICE'] - mode)*100/df['PRICE']) < 10
df['EXPECTED_OUTPUT'] = np.where(df['within_mode']==True, 1, 0)
print(df)

Вывод:

     SKU_NUM GEO_CD  GROUP_ID  PRICE  EXPECTED_OUTPUT  within_mode
0   70907334     SV   1198094   0.84                0        False
1   70073557     SV   1198094   1.08                0        False
2   70073797     SV   1198094   1.20                0        False
3   70394170     SV   1198094   1.20                0        False
4   70395532     SV   1198094   1.20                0        False
5   70325533     SV   1198094   1.32                0        False
6   70393532     SV   1198094   1.38                0        False
7   70428444     CR   1198094   8.07                1         True
8   70428459     CR   1198094   8.07                1         True
9   70428536     CR   1198094   8.07                1         True
10  70424536     CR   1198094   7.97                0        False
11  70221536     CR   1198094   7.97                0        False
12  70428532     CR   1198094   7.52                0        False
13  70009265     CR   1198094   8.85                1         True
14  70009266     CR   1198094   8.85                1         True
15  70079602     CR   1198094   8.85                1         True
16  70079853     CR   1198094   8.85                1         True
17  70340656     CR   1198094   8.85                1         True
18  70340665     CR   1198094   8.85                1         True
19  70340325     CR   1198094   9.74                1         True
20  70343265     CR   1198094  10.18                0        False
21  70320665     CR   1198094   9.56                1         True
22  70548879     NI   1198094  23.81                0        False
23  70548879     NI   1198094  26.78                0        False
24  70271547     NI   1198094  29.76                0        False
25  70271547     NI   1198094  29.76                0        False
26  70271547     NI   1198094  32.74                0        False
27  70271547     NI   1198094  35.71                0        False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...