Настройка
df = pd.DataFrame({'payout_date': {0: '2017-02-01T11:00:06', 1: '2017-02-01T11:00:06', 2: '2017-02-02T00:00:00', 3: '2017-02-14T11:00:06', 4: '2017-02-14T11:00:06', 5: '2017-02-15T11:00:06', 6: '2017-02-15T11:00:06', 7: '2017-02-16T11:00:06', 8: '2017-02-16T11:00:06', 9: '2017-02-16T11:00:06'}, 'total_value':{0: 177.313, 1: 22.0, 2: 25.0, 3: 47.391999999999996, 4: 16.254, 5: 125.818, 6: 85.0, 7: 42.0,8: 22.0, 9: 19.0}})
Использование normalize
для группировки по дням:
df.groupby(pd.DatetimeIndex(df.payout_date).normalize()).sum().reset_index()
payout_date total_value
0 2017-02-01 199.313
1 2017-02-02 48.000
2 2017-02-14 63.646
3 2017-02-15 210.818
4 2017-02-16 83.000
Расширьте предыдущую команду для построения графика:
df.groupby(
pd.DatetimeIndex(df.payout_date) \
.normalize().strftime('%Y-%m-%d')) \
.agg(['sum']) \
.reset_index() \
.plot(x='index', y='total_value', kind='bar')
plt.tight_layout()
plt.show()
Вывод для моих образцов данных:
Если вы хотите применить это кподмножество, вы можете сделать что-то вроде следующего:
tmp = df.loc[(df.payout_date > '2017-02-01') & (df.payout_date < '2017-02-15')]
tmp.groupby(
pd.DatetimeIndex(tmp.payout_date) \
.normalize().strftime('%Y-%m-%d'))['total_value'] \
.agg(['sum'])
# Result
sum
2017-02-01 199.313
2017-02-02 25.000
2017-02-14 63.646
, который будет только суммировать желаемый диапазон.