python pandas присваивает yyyy-mm-dd из нескольких лет в накопленные номера недель

1

Учитывая файл со следующими столбцами:

date, userid, amount

где date находится в формате yyyy-mm-dd. Я пытаюсь использовать python pandas для присвоения yyyy-mm-dd из нескольких лет в накопленные числа недель. Например:

2017-01-01  => 1
2017-12-31  => 52
2018-01-01  => 53

df_counts_dates=pd.read_csv("counts.csv")

print (df_counts_dates['date'].unique())

df = pd.to_datetime(df_counts_dates['date'])

print (df.unique())


print (df.dt.week.unique())

поскольку данные содержат даты августа 2017 года - август 2018 года, приведенные выше данные возвращаются

[33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52  1  2  3  4  5
  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
 31 32]

Мне интересно, есть ли простой способ сделать первую дату "неделя 1" и сделать число недель накапливаться в течение нескольких лет, а не становиться 1 в начале каждого года?

  • 1
    Недели - жуткая вещь, поскольку они ломаются по-другому в конце года. Я думаю, что ответ, который дает Джезраэль, будет хорошим началом, если вы согласны с этим.
Теги:
pandas
python-3.x
week-number

1 ответ

3

Мне кажется, нужно немного другой подход - сначала вычесть все значения столбца, timedeltas конвертировать в days, разделить пол на 7 и последний 1 для не начинать с 0:

rng = pd.date_range('2017-08-01', periods=365)
df = pd.DataFrame({'date': rng, 'a': range(365)})  
print (df.head())
        date  a
0 2017-08-01  0
1 2017-08-02  1
2 2017-08-03  2
3 2017-08-04  3
4 2017-08-05  4

w = ((df['date'] - df['date'].iloc[0]).dt.days // 7 + 1).unique()
print (w)
[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
 49 50 51 52 53]
  • 0
    Что не так с pd.date_range(..., freq='W') ?
  • 0
    @smci - Как вы думаете, в данных образца? OP использует datetime в днях, поэтому выборочные данные тоже.

Ещё вопросы

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