Полные дни в данных из DataFrame, сгруппированных по группам по - PullRequest
0 голосов
/ 20 января 2020

У меня есть этот Dataframe: DataFrame Я применил df.groupby ('site') для классификации данных по этой функции.

   grouped = Datos.groupby('site')

После классификации я хочу завершить, для все записи, столбец «дата» день ото дня. Процедура, которой, я думаю, я должен следовать, будет: 1. Создать полную последовательность между датой начала и окончания. (Шаг выполнен).

for site in grouped:
    dates = ['2018-01-01', '2020-01-17']
    startDate = datetime.datetime.strptime( dates[0], "%Y-%m-%d") # parse first date
    endDate   = datetime.datetime.strptime( dates[-1],"%Y-%m-%d") # parse last date 
    days = (endDate - startDate).days  # how many days between?
    allDates = {datetime.datetime.strftime(startDate+datetime.timedelta(days=k), 
                                        "%Y-%m-%d"):0 for k in range(days+1)}
Сравните эту последовательность со столбцом "дата" моей группы. ('Сайт) и добавьте те, которые отсутствуют, не совпадают с датами в' date '. Напишите функцию или l oop, которая позволит вам обновить столбец "date" новыми датами и также заполните пропущенные значения 0.
(grouped.apply(add_days))

Пока мне удалось завершить только шаг 1, поэтому я прошу вашей помощи для выполнения шагов 2 и 3. Я был бы очень признателен вам за всегда важная помощь Привет

1 Ответ

0 голосов
/ 20 января 2020

Мне пришлось сделать то же самое для проекта: возможно, это не лучшее решение для вас, но оно может вам помочь. (и я надеюсь избавить вас от головной боли, которая у меня была) Вот как мне это удалось с помощью https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html

df_DateRange=pd.DataFrame()
df_1=pd.DataFrame()
grouped=pd.DataFrame()

#1. Create a DataFrame with alldays (your step2):
#Create a DataFrame with alldays
dates_list = ['2019-12-31', '2020-01-05']
df_DateRange['date']=pd.date_range(start=dates_list [0],end=dates_list [-1],freq='1D')
df_DateRange['date']=df_DateRange['date'].dt.strftime('%Y-%m-%d')
df_DateRange.set_index(['date'],inplace=True)

#Set index of you Datos DataFrame:
Datos.set_index(['date'], inplace=True)

#Join both DataFrame:
df_1=df_DateRange.join(Datos)


#2. Replace the NaN:
df_1['site'].fillna("", inplace=True)
df_1['value'].fillna(0, inplace=True)
df_1['value2'].fillna(0, inplace=True)


#3. do the calculation:
grouped = df_1.groupby('site').sum()

df_DateRange:
дата 0 2019-12- 31 1 2020-01-01 2 2020-01-02 3 2020-01-03 4 2020-01-04 5 2020-01-05

Дата: дата значение объекта2 0 2020-01-01 site1 1 -1 1 2020-01-01 site2 2 -2 2 2020-01-02 site1 10 -10 3 2020-01-02 site2 20 -20

df1: значение сайта value2 дата 2019-12-31 0.0 0.0 2020-01-01 site1 1.0 -1.0 2020-01-01 site2 2.0 -2.0 2020-01-02 site1 10.0 -10.0 2020-01-02 site2 20.0 -20.0 2020-01-03 0.0 0.0 2020-01-04 0,0 0,0 2020-01-05 0,0 0,0

сгруппировано = значение значение2 сайт 0,0 0,0 сайт1 11,0 -11,0 сайт2 22,0 -22,0

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