Присвоить значения на основе количества вхождений в зависимости от двух столбцов - PullRequest
0 голосов
/ 18 октября 2019

У меня есть фрейм данных с данными ранжирования по ключевым словам для нескольких городов, как в примере ниже:


| Location | Keyword               | Position | Domain       |
|----------|-----------------------|----------|--------------|
| London   | Python developer jobs | 1        | Domain-A.com |
| London   | Python developer jobs | 2        | Domain-A.com |
| London   | Python developer jobs | 3        | Domain-B.com |
| London   | Python developer jobs | 4        | Domain-A.com |
| London   | Python developer jobs | 5        | Domain-B.com |
| London   | Python developer jobs | 6        | Domain-C.com |
| London   | Python developer jobs | 7        | Domain-C.com |
| London   | Data scientist jobs   | 1        | Domain-A.com |
| London   | Data scientist jobs   | 2        | Domain-B.com |
| London   | Data scientist jobs   | 3        | Domain-C.com |
| New York | Python developer jobs | 1        | Domain-B.com |
| New York | Python developer jobs | 2        | Domain-A.com |
| New York | Python developer jobs | 3        | Domain-B.com |
| New York | Python developer jobs | 4        | Domain-A.com |
| New York | Data scientist jobs   | 1        | Domain-A.com |
| New York | Data scientist jobs   | 2        | Domain-A.com |
| New York | Data scientist jobs   | 3        | Domain-A.com |
| New York | Data scientist jobs   | 4        | Domain-A.com |
| …        | …                     | …        | …            |


Мне трудно придумать функцию, которая создает новый столбец и присваивает уменьшающееся значениена основе количества вхождений домена в зависимости от местоположения и ключевого слова.

Таким образом, первое вхождение любого домена с ключевым словом X в местоположение Y получает значение 10, второе вхождение домена в том же ключевом слове и группе местоположений получает значение 5, и все последующие вхождения в этой группе получаютзначение 1.

Конечный результат должен выглядеть следующим образом:

| Location | Keyword               | Position | Domain       | Value |
|----------|-----------------------|----------|--------------|-------|
| London   | Python developer jobs | 1        | Domain-A.com | 10    |
| London   | Python developer jobs | 2        | Domain-A.com | 5     |
| London   | Python developer jobs | 3        | Domain-B.com | 10    |
| London   | Python developer jobs | 4        | Domain-A.com | 1     |
| London   | Python developer jobs | 5        | Domain-B.com | 5     |
| London   | Python developer jobs | 6        | Domain-C.com | 10    |
| London   | Python developer jobs | 7        | Domain-C.com | 5     |
| London   | Data scientist jobs   | 1        | Domain-A.com | 10    |
| London   | Data scientist jobs   | 2        | Domain-B.com | 10    |
| London   | Data scientist jobs   | 3        | Domain-C.com | 10    |
| New York | Python developer jobs | 1        | Domain-B.com | 10    |
| New York | Python developer jobs | 2        | Domain-A.com | 10    |
| New York | Python developer jobs | 3        | Domain-B.com | 5     |
| New York | Python developer jobs | 4        | Domain-A.com | 5     |
| New York | Data scientist jobs   | 1        | Domain-A.com | 10    |
| New York | Data scientist jobs   | 2        | Domain-A.com | 5     |
| New York | Data scientist jobs   | 3        | Domain-A.com | 1     |
| New York | Data scientist jobs   | 4        | Domain-A.com | 1     |
| …        | …                     | …        | …            | …     |

````

Thanks for you support!

1 Ответ

1 голос
/ 18 октября 2019

Вы можете попробовать groupby:

grp = df.groupby(['Location', 'Keyword', 'Domain']).cumcount()

setter = {0: 10, 1:5}

df['cumcount'] = grp.apply(lambda x: setter.setdefault(x,1))
df

Вывод:

    Location    Keyword Position    Domain  cumcount
0   London  Python developer jobs   1   Domain-A.com    10
1   London  Python developer jobs   2   Domain-A.com    5
2   London  Python developer jobs   3   Domain-B.com    10
3   London  Python developer jobs   4   Domain-A.com    1
4   London  Python developer jobs   5   Domain-B.com    5
5   London  Python developer jobs   6   Domain-C.com    10
6   London  Python developer jobs   7   Domain-C.com    5
7   London  Data scientist jobs 1   Domain-A.com    10
8   London  Data scientist jobs 2   Domain-B.com    10
9   London  Data scientist jobs 3   Domain-C.com    10
10  New York    Python developer jobs   1   Domain-B.com    10
11  New York    Python developer jobs   2   Domain-A.com    10
12  New York    Python developer jobs   3   Domain-B.com    5
13  New York    Python developer jobs   4   Domain-A.com    5
14  New York    Data scientist jobs 1   Domain-A.com    10
15  New York    Data scientist jobs 2   Domain-A.com    5
16  New York    Data scientist jobs 3   Domain-A.com    1
17  New York    Data scientist jobs 4   Domain-A.com    1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...