python - 每天最后10分钟

标签 python pandas group-by resampling days

我正在尝试获取每天最后每 10 分钟完成的业务交易量

我的数据如下:

DF_Q

Out[97]: 
LongTime
2016-01-04 09:30:00     35077034
2016-01-04 09:30:11         1119
2016-01-04 09:30:21     12295250
2016-01-04 09:30:23      1387856
2016-01-04 09:30:40       877954
...
2016-05-27 15:59:53        16986
2016-05-27 15:59:58     50080165
2016-05-27 15:59:59     17097260
Name: Volume, dtype: int64

我首先将该系列重新采样为 10 分钟的间隔,然后我获得了:

DF_Qmin = DF_Q.resample('10min').sum()

DF_Qmin
Out[102]: 
LongTime
2016-01-04 09:30:00    3.202500e+05
2016-01-04 09:40:00    1.192028e+08
2016-01-04 09:50:00    6.156090e+07
2016-01-04 10:00:00    1.289250e+09
...
2016-05-27 15:20:00    1.035539e+09
2016-05-27 15:30:00    1.489631e+09
2016-05-27 15:40:00    2.228257e+09
2016-05-27 15:50:00    5.352179e+09
Freq: 10T, Name: Volume, dtype: float64

然后我做一个数据透视表

,我将其保存为 excel 并手动获取每天的最后 10 分钟交易量

2016-01-04 16:50:00 3.693279e+09
2016-01-05 16:50:00 2.158429e+09
...
2016-05-26 15:50:00 1.256878e+08
2016-05-27 15:50:00 6.521489e+09

不用excel也可以吗?还是每天迭代?

最佳答案

我想你需要groupby通过 date和聚合 last .最后 rename_axis (pandas 0.18.0 中的新功能)和 reset_index :

#if need column LongTime
DF_Qmin = DF_Qmin.reset_index()

print (DF_Qmin.groupby(DF_Qmin.LongTime.dt.date).last())

示例:

import pandas as pd

DF_Qmin = pd.Series({pd.Timestamp('2016-01-04 09:30:00'): 320250.0, pd.Timestamp('2016-01-04 09:50:00'): 61560900.0, pd.Timestamp('2016-05-27 15:40:00'): 2228257000.0, pd.Timestamp('2016-01-04 09:40:00'): 119202800.0, pd.Timestamp('2016-05-27 15:30:00'): 1489631000.0, pd.Timestamp('2016-01-04 10:00:00'): 1289250000.0, pd.Timestamp('2016-05-27 15:50:00'): 5352179000.0, pd.Timestamp('2016-05-27 15:20:00'): 1035539000.0}, name='Volume')
DF_Qmin.index.name = 'LongTime'
print (DF_Qmin)
LongTime
2016-01-04 09:30:00    3.202500e+05
2016-01-04 09:40:00    1.192028e+08
2016-01-04 09:50:00    6.156090e+07
2016-01-04 10:00:00    1.289250e+09
2016-05-27 15:20:00    1.035539e+09
2016-05-27 15:30:00    1.489631e+09
2016-05-27 15:40:00    2.228257e+09
2016-05-27 15:50:00    5.352179e+09
Name: Volume, dtype: float64
DF_Qmin = DF_Qmin.reset_index()
print (DF_Qmin)
             LongTime        Volume
0 2016-01-04 09:30:00  3.202500e+05
1 2016-01-04 09:40:00  1.192028e+08
2 2016-01-04 09:50:00  6.156090e+07
3 2016-01-04 10:00:00  1.289250e+09
4 2016-05-27 15:20:00  1.035539e+09
5 2016-05-27 15:30:00  1.489631e+09
6 2016-05-27 15:40:00  2.228257e+09
7 2016-05-27 15:50:00  5.352179e+09

print (DF_Qmin.groupby(DF_Qmin.LongTime.dt.date)
              .last()
              .rename_axis('Date')
              .reset_index())

         Date            LongTime        Volume
0  2016-01-04 2016-01-04 10:00:00  1.289250e+09
1  2016-05-27 2016-05-27 15:50:00  5.352179e+09

如果不需要最后一次:

print (DF_Qmin.groupby(DF_Qmin.index.date)
              .last()
              .rename_axis('Date')
              .reset_index())
         Date        Volume
0  2016-01-04  1.289250e+09
1  2016-05-27  5.352179e+09

关于python - 每天最后10分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37530911/

相关文章:

python - 结合 Tkinter (Python) 和 Swing (Jython)

python - 在 Pandas 中的相对行上应用函数

mysql - 使用 bool 字段选择赞成票和反对票总数

sql - Spark SQL分组: Add to group by or wrap in first() if you don't care which value you get.;

python - 在 Python 中将一个数据帧中的值替换为第二个数据帧中的值

python - 在 Python 中读取 SQL 表

创建二维 numpy 数组的 Pythonic 方式

python - 删除满足条件的子系列(数据框中的行)

python - 如何动态匹配两个 pandas 数据帧中的行

mysql - 日期 : group by month from day 2 to day 1 next month