Генерация количества недель в кадре данных Pandas на основе другого столбца Дата - PullRequest
0 голосов
/ 20 сентября 2019

Я использую приведенный ниже код для генерации кадра данных, например:

enter image description here

Проблема, с которой я сталкиваюсь, заключается в том, что числонедели, закончится на 53,0, а затем вернется к 1,0, после чего счетчик продолжится.

enter image description here

Мне нужно решение, где,количество недель продолжается до 53,0, 54,0 и до конца Дата (в первом столбце).

import pandas as pd
s = pd.date_range('2006-12-16', '2010-11-26', freq='D').to_series()
s.dt.dayofweek

sample = s.dt.dayofweek
df_sample=sample.to_frame()
df_sample.rename(columns = {0: 'Day_num'}, inplace=True)

df_sample.loc[df_sample.Day_num == 5, 'Day_name'] = 'Saturday'
df_sample.loc[df_sample.Day_num == 6, 'Day_name'] = 'Sunday'
df_sample.loc[df_sample.Day_num == 0, 'Day_name'] = 'Monday'
df_sample.loc[df_sample.Day_num == 1, 'Day_name'] = 'Tuesday'
df_sample.loc[df_sample.Day_num == 2, 'Day_name'] = 'Wednesday'
df_sample.loc[df_sample.Day_num == 3, 'Day_name'] = 'Thursday'
df_sample.loc[df_sample.Day_num == 4, 'Day_name'] = 'Friday'

df_sample = df_sample['Day_name'].astype(str)
df_sample = df_sample.to_frame()

df_sample.reset_index(level=0, inplace=True)
df_sample.rename(columns={'index': 'Date'}, inplace=True)

df_sample['Week_Number'] = df_sample['Date'].dt.week

Я чувствую, что есть более простое решение для этого, и прошу любую помощь у кого-то, кто имеет лучший методрешения этого.

1 Ответ

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

Вы можете использовать:

s = pd.date_range('2006-12-16', '2010-11-26', freq='D')
df_sample=s.to_frame()
df_sample['Day_Name']=s.day_name()
df_sample=df_sample.reset_index(drop=True).rename(columns={0:'Date'})
week_range=np.arange(df_sample.index[0],df_sample.index[len(df_sample.index)-1],7)
df_sample['Week_Number']=df_sample.groupby(pd.cut(df_sample.index,week_range,right=False)).ngroup(ascending=False).sort_values().reset_index(drop=True)+1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...