Преобразование столбца панд в определенные пользователем номера недель

1

Ниже представлено небольшое подмножество довольно большого фреймворка данных в python.

ID          invoiceDate
1           2017-07-18
2           2017-10-17
3           2017-08-20
4           2017-09-05
5           2017-08-20
6           2017-11-08
7           2017-09-17
8           2017-11-10
9           2017-08-14
10          2017-08-24

Учитывая, что период интереса находится между 2017-07-13 и 2017-11-21, он эквивалентен 20 неделям. Мне нужно сопоставить каждое значение в invoiceDate с соответствующим номером недели. Например, 2017-07-18 отображается на неделю №1 (первая неделя начинается и заканчивается на 2017-07-13 и 2017-07-19 соответственно) или 2017-08-20 на неделю №6 (неделя 6 начинается и начинается заканчивается в 2017-08-17 и 2017-08-23 соответственно). invoiceDate имеет тип объекта.

Теги:
pandas

3 ответа

4
Лучший ответ

Используйте to_period с to_period "W-Wed", изменяющей начало недели.

s = df['invoiceDate'].dt.to_period('W-Wed').dt.week
df['Week_Num'] = (s - s.min() + 1)

df ['Week_Num'] = (df ['invoiceDate']. dt.to_period ('W-Wed'). dt.week - df ['invoiceDate']. dt.to_period ('W-Wed'). dt. week.min() + 1)

Выход:

   productID invoiceDate  Week_Num
0          1  2017-07-18         1
1          2  2017-10-17        14
2          3  2017-08-20         6
3          4  2017-09-05         8
4          5  2017-08-20         6
5          6  2017-11-08        17
6          7  2017-09-17        10
7          8  2017-11-10        18
8          9  2017-08-14         5
9         10  2017-08-24         7
  • 1
    Очень хороший ответ!
  • 0
    @ user3483203 Спасибо.
Показать ещё 2 комментария
2

IIUC

(df.invoiceDate-pd.to_datetime('2017-07-13')).dt.days//7+1
Out[352]: 
0     1
1    14
2     6
3     8
4     6
5    17
6    10
7    18
8     5
9     7
Name: invoiceDate, dtype: int64
  • 0
    Спасибо за это!
1

Вы ищете что-то вроде этого?

df = pd.DataFrame()
df['ID'] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
df['InvDate'] = ['2017-07-18', '2017-10-17', '2017-08-20', '2017-09-05', '2017-08-20', '2017-11-08', '2017-09-17', '2017-11-10', '2017-08-14', '2017-08-24']

df['InvDate'] = pd.to_datetime(df['InvDate'])
df['WeekNum'] = df['InvDate'].dt.to_period('W').dt.week
df['WeekNum'] = df['WeekNum'] - df['WeekNum'][0] + 1

Выход:

   ID    InvDate  WeekNum
0   1 2017-07-18        1
1   2 2017-10-17       14
2   3 2017-08-20        6
3   4 2017-09-05        8
4   5 2017-08-20        6
5   6 2017-11-08       17
6   7 2017-09-17       10
7   8 2017-11-10       18
8   9 2017-08-14        5
9  10 2017-08-24        7
  • 0
    Спасибо за это!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню