У меня есть следующий фрейм данных
UNIT C/A DATETIME TOTAL COUNTs
R248 HOO7 2018-03-03 03:00:00 139.0
2018-03-03 07:00:00 927.0
2018-03-04 11:00:00 1946.0
2018-03-05 07:00:00 1330.0
2018-03-05 11:00:00 2358.0
Я хочу рассчитать сумму "ВСЕГО COUNTS" за каждый день. Поэтому я хочу, чтобы dataframe выглядел следующим образом:
UNIT C/A DATETIME TOTAL COUNTs
R248 HOO7 2018-03-03 1066
2018-03-04 1946
2018-03-05 3688
Я прочитал, что мне нужно установить индекс этого блока данных в индекс "datetime", а затем использовать.resample, но я не уверен, как это сделать.
Используйте, если 3 уровня MultiIndex
используют floor
или date
и суммарную sum
:
dates = df.index.get_level_values('DATETIME').floor('D')
Или же:
dates = pd.Series(df.index.get_level_values('DATETIME').date, name='DATETIME', index=df.index)
Если столбец DATETIME
:
dates = df['DATETIME'.dt.floor('D')
dates = df['DATETIME'].dt.date
df = df.groupby(['UNIT','C/A', dates]).sum().reset_index()
print (df)
UNIT C/A DATETIME TOTAL COUNTs
0 R248 HOO7 2018-03-03 1066.0
1 R248 HOO7 2018-03-04 1946.0
2 R248 HOO7 2018-03-05 3688.0
Решение с resample
:
df = df.set_index('DATETIME').groupby(['UNIT','C/A']).resample('D').sum().reset_index()
Или же:
df = df.groupby(['UNIT','C/A', pd.Grouper(key='DATETIME', freq='D')]).sum().reset_index()
print (df)
UNIT C/A DATETIME TOTAL COUNTs
0 R248 HOO7 2018-03-03 1066.0
1 R248 HOO7 2018-03-04 1946.0
2 R248 HOO7 2018-03-05 3688.0
Попробуй это:
df.groupby(df.DATETIME.dt.date)["TOTAL COUNTs"].sum()
print (df.info())
?