Я хочу разделить мой датафрейм по годам - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть фрейм данных, содержащий столбец со значениями даты в формате datetime64.Я хочу разделить свой фрейм данных на отдельные фреймы в зависимости от года.Я написал код ниже, который работает, но это очень непрактично.

Надеюсь, что у кого-то есть лучшее решение!

# import libs

import numpy as np
import pandas as pd
from random import sample

# Make some random dataframe with two columns

date = np.arange('2005-02', '2008-03', dtype='datetime64[D]')

status = ["X"]*(int(round(0.9*len(date),0))) +['y']*(int(round(0.05*len(date),0)))+['z']*(int(round(0.05*len(date),0)))
newstatus = sample(status, len(status))

data = {'Data': date, 'Status': newstatus}

df = pd.DataFrame(data)


# Extract year from date and make dummies index for splitting

df['Year'] = pd.DatetimeIndex(df['Data']).year
df = pd.get_dummies(df, columns = ['Year'])

# Split on dummies

df_2007, df_2006, df_2005, df_2008  = df, df, df, df
df_2008= df_2008[df_2008.Year_2008 != 0]
df_2007 = df_2007[df_2007.Year_2007 != 0]
df_2006= df_2006[df_2006.Year_2006 != 0]
df_2005= df_2005[df_2005.Year_2005 != 0]

#Remove Dummies

years = ['Year_2005', 'Year_2006', 'Year_2007', 'Year_2008']
df_2008 = df_2008.drop(years, axis = 1)
df_2007 = df_2007.drop(years, axis = 1)
df_2006 = df_2006.drop(years, axis = 1)
df_2005 = df_2005.drop(years, axis = 1)

1 Ответ

0 голосов
/ 09 февраля 2019

Может быть, это может вам помочь:

years = df['Data'].dt.year.unique() # I'm guessing Data should be Date really but I'll go along with it.
dfs = {y: df[df['Data'].dt.year == y] for y in years}

Это создает диктовку, где ключи - это годы, а значения - это кадры данных, соответствующие каждому году.Это означает, что dfs[2008] дает вам фрейм данных, содержащий данные за 2008 год.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...