Группировка данных по дням в каждую неделю, возможно, с использованием datetime. дата-фрейм отличается для каждого дня. Должны слить - PullRequest
0 голосов
/ 29 апреля 2020

import pandas as pd

# intialise data of lists. 
date1={'Indv':[1,2,3,4],'date':[1,1,1,1],'number':[5,5,5,5]}
date2={'Indv':[1,2,3,4],'date':[2,2,2,2],'number':[5,6,5,3]}
date3={'Indv':[1,2,3,4],'date':[3,3,3,3],'number':[2,3,4,5]}
date4={'Indv':[1,2,3,4],'date':[4,4,4,4],'number':[1,3,4,5]}
date5={'Indv':[1,2,3,4],'date':[5,5,5,5],'number':[2,3,7,5]}
date6={'Indv':[1,2,3,4],'date':[6,6,6,6],'number':[9,11,4,5]}
date7={'Indv':[1,2,3,4],'date':[7,7,7,7],'number':[3,3,4,5]}

date8={'Indv':[1,2,3,4],'date':[8,8,8,8],'number':[5,5,5,5]}
date9={'Indv':[1,2,3,4],'date':[9,9,9,9],'number':[5,6,5,3]}
date10={'Indv':[1,2,3,4],'date':[10,10,10,10],'number':[2,3,4,5]}
date11={'Indv':[1,2,3,4],'date':[11,11,11,11],'number':[1,3,4,5]}
date12={'Indv':[1,2,3,4],'date':[12,12,12,12],'number':[2,3,7,5]}
date13={'Indv':[1,2,3,4],'date':[13,13,13,13],'number':[9,11,4,5]}
date14={'Indv':[1,2,3,4],'date':[14,14,14,14],'number':[3,3,4,5]}



#CreateDataFrame
#Importing first seven days data
df1=pd.DataFrame(date1)
df2=pd.DataFrame(date2)
df3=pd.DataFrame(date3)
df4=pd.DataFrame(date4)
df5=pd.DataFrame(date5)
df6=pd.DataFrame(date6)
df7=pd.DataFrame(date7)

#merging first seven days data into one week data
final_week_1=df1.append([df2,df3,df4,df5,df6,df7])
final_week_1['week']=1

#Performing a groupby on week 1
groupby_week_1=final_week_1.groupby(['Indv','week'])['number'].sum().reset_index(name='weekly_total')

#delete the intermediate  files to freeup memory and keep only the
del final_week_1


#CreateDataFrame
#Importing next set of seven days data of week 2
df8=pd.DataFrame(date8)
df9=pd.DataFrame(date9)
df10=pd.DataFrame(date10)
df11=pd.DataFrame(date11)
df12=pd.DataFrame(date12)
df13=pd.DataFrame(date13)
df14=pd.DataFrame(date14)

#merging second set of seven days and week 2
final_week_2=df8.append([df9,df10,df11,df12,df13,df14])
final_week_2['week']=2

#Performing a groupby on week 2
groupby_week_2=final_week_2.groupby(['Indv','week'])['number'].sum().reset_index(name='weekly_total')
del final_week_2

all_weeks_data=groupby_week_1.append([groupby_week_1])


Необходимо сохранить указанный выше код в l oop и получить последние вышеуказанные еженедельные сгруппированные данные all_weeks_data

Данные представлены в формате каждого дня

Необходимо объединять каждые семь дней от 1 дня до 52 недель. Обрабатывайте файлы каждую неделю и экспортируйте данные. объединение данных за все n дней приводит к ошибке памяти, так как размеры файлов очень велики.

Необходимо написать python код для объединения данных каждые семь дней, экспортировать их и продолжить l oop этого недель

1 Ответ

0 голосов
/ 29 апреля 2020

Из того, что я понимаю, вы хотите подвести итоги еженедельного обзора данного «числа». Пожалуйста, обновите вопрос, если это не так:

import pandas as pd
from datetime import datetime

date1={'Indv':[1,2,3,4],'date':['2020-02-01','2020-02-01','2020-02-01','2020-02-01'],'number':[5,5,5,5]}
date2={'Indv':[1,2,3,4],'date':['2020-02-02','2020-02-02','2020-02-02','2020-02-02'],'number':[5,6,5,3]}
date3={'Indv':[1,2,3,4],'date':['2020-02-03','2020-02-03','2020-02-03','2020-02-03'],'number':[2,3,4,5]}
date4={'Indv':[1,2,3,4],'date':['2020-02-04','2020-02-04','2020-02-04','2020-02-04'],'number':[1,3,4,5]}
date5={'Indv':[1,2,3,4],'date':['2020-02-05','2020-02-05','2020-02-05','2020-02-05'],'number':[2,3,7,5]}
date6={'Indv':[1,2,3,4],'date':['2020-02-06','2020-02-06','2020-02-06','2020-02-06'],'number':[9,11,4,5]}
date7={'Indv':[1,2,3,4],'date':['2020-02-07','2020-02-07','2020-02-07','2020-02-07'],'number':[3,3,4,5]}
date8={'Indv':[1,2,3,4],'date':['2020-02-08','2020-02-08','2020-02-08','2020-02-08'],'number':[5,5,5,5]}
date9={'Indv':[1,2,3,4],'date':['2020-02-09','2020-02-09','2020-02-09','2020-02-09'],'number':[5,6,5,3]}
date10={'Indv':[1,2,3,4],'date':['2020-02-10','2020-02-10','2020-02-10','2020-02-10'],'number':[2,3,4,5]}
date11={'Indv':[1,2,3,4],'date':['2020-02-11','2020-02-11','2020-02-11','2020-02-11'],'number':[1,3,4,5]}
date12={'Indv':[1,2,3,4],'date':['2020-02-12','2020-02-12','2020-02-12','2020-02-12'],'number':[2,3,7,5]}
date13={'Indv':[1,2,3,4],'date':['2020-02-13','2020-02-13','2020-02-13','2020-02-13'],'number':[9,11,4,5]}
date14={'Indv':[1,2,3,4],'date':['2020-02-14','2020-02-14','2020-02-14','2020-02-14'],'number':[3,3,4,5]}

#CreateDataFrame
df1=pd.DataFrame(date1)
df2=pd.DataFrame(date2)
df3=pd.DataFrame(date3)
df4=pd.DataFrame(date4)
df5=pd.DataFrame(date5)
df6=pd.DataFrame(date6)
df7=pd.DataFrame(date7)
df8=pd.DataFrame(date8)
df9=pd.DataFrame(date9)
df10=pd.DataFrame(date10)
df11=pd.DataFrame(date11)
df12=pd.DataFrame(date12)
df13=pd.DataFrame(date13)
df14=pd.DataFrame(date14)

df_list = [df1,df2,df3,df4,df5,df6,df7,df8,df9,df10,df11,df12,df13,df14]

def append_df(df_list):
    df = pd.DataFrame()
    df = df.append(df_list)
    df['date'] = df['date'].apply(lambda x: datetime.strptime(x, '%Y-%m-%d'))
    df['week'] = df['date'].dt.week
    return df

all_dates_data = append_df(df_list)
weekly_total = all_dates_data.groupby(['week']).sum()

Я позволил себе принять тип данных столбца date. Далее я написал функцию, в которой вы конвертируете дату в «номер недели»; и, наконец, группа по "неделе".

...