Создайте столбец для месяца из столбца даты (однако столбец даты не содержит информацию о месяце) - PullRequest
1 голос
/ 20 сентября 2019

У меня есть такие данные, и я хочу создать столбец с именем «Месяц»

+---------+------------------+------+------+
| Name    | Task             | Team | Date |
+---------+------------------+------+------+
| John    | Market study     | A    | 1    |
+---------+------------------+------+------+
| Michael | Customer service | B    | 1    |
+---------+------------------+------+------+
| Joanna  | Accounting       | C    | 1    |
+---------+------------------+------+------+
| John    | Accounting       | B    | 2    |
+---------+------------------+------+------+
| Michael | Customer service | A    | 2    |
+---------+------------------+------+------+
| Joanna  | Market study     | C    | 2    |
+---------+------------------+------+------+
| John    | Customer service | C    | 1    |
+---------+------------------+------+------+
| Michael | Market study     | A    | 1    |
+---------+------------------+------+------+
| Joanna  | Customer service | B    | 1    |
+---------+------------------+------+------+
| John    | Market study     | A    | 2    |
+---------+------------------+------+------+
| Michael | Customer service | B    | 2    |
+---------+------------------+------+------+
| Joanna  | Accounting       | C    | 2    |
+---------+------------------+------+------+

Итак, в основном, у меня есть информация о дате, но дата не содержит месяц, которому она принадлежит.Тем не менее, я знаю, что если это происходит в первый раз, то он будет принадлежать месяцу 1, если это происходит во второй раз, то он будет принадлежать месяцу 2. Так, например, дата 1 происходит 3 раза, а затем прерывается по дате2. Таким образом, первые 3 раза относятся к 1 месяцу, а следующие 3 раза - к 2 месяцу. Поэтому мне бы хотелось, чтобы мой результат был таким:

+---------+------------------+------+------+---------+
| Name    | Task             | Team | Date | Month   |
+---------+------------------+------+------+---------+
| John    | Market study     | A    | 1    | Month 1 |
+---------+------------------+------+------+---------+
| Michael | Customer service | B    | 1    | Month 1 |
+---------+------------------+------+------+---------+
| Joanna  | Accounting       | C    | 1    | Month 1 |
+---------+------------------+------+------+---------+
| John    | Accounting       | B    | 2    | Month 1 |
+---------+------------------+------+------+---------+
| Michael | Customer service | A    | 2    | Month 1 |
+---------+------------------+------+------+---------+
| Joanna  | Market study     | C    | 2    | Month 1 |
+---------+------------------+------+------+---------+
| John    | Customer service | C    | 1    | Month 2 |
+---------+------------------+------+------+---------+
| Michael | Market study     | A    | 1    | Month 2 |
+---------+------------------+------+------+---------+
| Joanna  | Customer service | B    | 1    | Month 2 |
+---------+------------------+------+------+---------+
| John    | Market study     | A    | 2    | Month 2 |
+---------+------------------+------+------+---------+
| Michael | Customer service | B    | 2    | Month 2 |
+---------+------------------+------+------+---------+
| Joanna  | Accounting       | C    | 2    | Month 2 |
+---------+------------------+------+------+---------+

Понятия не имею,кроме просто использования некоторых петель.Спасибо всем.

1 Ответ

1 голос
/ 21 сентября 2019

Если я правильно понимаю вопрос, вы можете сделать следующее: создать маску s, чтобы разделить каждое последовательное значение в отдельную группу.От s создайте маску s1 для каждого значения каждой группы.Сгруппируйте s1 и Date и выполните cumcount и map для создания желаемого результата:

s = df.Date.ne(df.Date.shift()).cumsum()
s1 = df.Date.groupby(s).cumcount()

df['Month'] = df.groupby([s1, 'Date']).Name.cumcount().add(1).map(lambda x: 'Month '+str(x))

Out[897]:
       Name              Task Team  Date    Month
0      John      Market-study    A     1  Month 1
1   Michael  Customer-service    B     1  Month 1
2    Joanna        Accounting    C     1  Month 1
3      John        Accounting    B     2  Month 1
4   Michael  Customer-service    A     2  Month 1
5    Joanna      Market-study    C     2  Month 1
6      John  Customer-service    C     1  Month 2
7   Michael      Market-study    A     1  Month 2
8    Joanna  Customer-service    B     1  Month 2
9      John      Market-study    A     2  Month 2
10  Michael  Customer-service    B     2  Month 2
11   Joanna        Accounting    C     2  Month 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...