Фрейм данных: добавьте столбец «inplace» с указанием cumcount () дат, отображаемых в datetime.index - PullRequest
1 голос
/ 25 октября 2019

Я хотел бы добавить столбец (с заголовком «acc_dates»), который бы давал увеличивающееся число дат в кадре данных с индексом datetime. Вот пример:

import pandas as pd
import datetime as dt

datarange=pd.date_range('01-05-2018 00:00:00', periods=50, freq="4H")
range_series_1=pd.Series(np.random.randint(-5,3,size=50).astype(float), index=datarange)
df=pd.DataFrame({'value1':range_series_1})

df.head(5)
Out[287]: 
                     value1
datetime                   
2018-01-05 00:00:00     1.0
2018-01-05 04:00:00    -2.0
2018-01-05 08:00:00    -2.0
2018-01-05 12:00:00    -3.0
2018-01-05 16:00:00     1.0

Если я применю cumcount(), столбец 'value1' исчезнет. Это то, что я печатаю и что получаю:

df.groupby(df.index.date).cumcount().to_frame('acc_dates').head(15)
Out[288]: 
                     acc_dates
datetime                      
2018-01-05 00:00:00          0
2018-01-05 04:00:00          1
2018-01-05 08:00:00          2
2018-01-05 12:00:00          3
2018-01-05 16:00:00          4
2018-01-05 20:00:00          5
2018-01-06 00:00:00          0
2018-01-06 04:00:00          1
2018-01-06 08:00:00          2
2018-01-06 12:00:00          3
2018-01-06 16:00:00          4
2018-01-06 20:00:00          5
2018-01-07 00:00:00          0
2018-01-07 04:00:00          1
2018-01-07 08:00:00          2

Я могу объединить два кадра данных в datetime, чтобы получить желаемый результат, но я бы предпочел не применять метод pd.merge (). Вот результат, который я ожидаю:

Out[296]:
                     value1  acc_dates
datetime                              
2018-01-05 00:00:00     1.0          0
2018-01-05 04:00:00    -2.0          1
2018-01-05 08:00:00    -2.0          2
2018-01-05 12:00:00    -3.0          3
2018-01-05 16:00:00     1.0          4
2018-01-05 20:00:00     0.0          5
2018-01-06 00:00:00     2.0          0
2018-01-06 04:00:00    -3.0          1
2018-01-06 08:00:00    -5.0          2
2018-01-06 12:00:00    -5.0          3
2018-01-06 16:00:00     1.0          4
2018-01-06 20:00:00    -2.0          5
2018-01-07 00:00:00     2.0          0
2018-01-07 04:00:00     1.0          1
2018-01-07 08:00:00    -1.0          2
2018-01-07 12:00:00    -2.0          3

В идеале, я ищу способ как-то создать и добавить столбец в начальный df inplace.

Возможно ли это? Я приветствую ваши предложения.

1 Ответ

1 голос
/ 25 октября 2019

Я думаю, merge или concat не нужны, только назначьте вывод новому столбцу:

df['acc_dates'] = df.groupby(df.index.date).cumcount()
...