作者jasonhsu14 (14号星期五的杰森)
看板Python
标题[问题] resample是否可指定每日的期间
时间Sun Dec 20 22:06:10 2020
各位版友好,这边有个问题想请教
start, end = '2000-10-01 9:30:00', '2000-10-20 15:30:00'
rng = pd.date_range(start, end, freq='10min')
ts=pd.DataFrame(data={'DT': rng, 'Value':np.arange(len(rng)) * 2})
ts.set_index('DT', inplace=True)
假设我有一个长得像上面ts的资料
这个资料期间 从10/1 9:30 开始每10分钟就有资料,直到10/20的15:30
然後我只想取得每一天的10:00到13:00 期间,每50分钟以内的资料总和
然後最後不满50分钟,则以到13:00期间的资料为主
我若想达成这样,还麻烦版友指点小弟我该如何操作
我知道有resample可以用,可是google看来看去
resample似乎无法取出 每一天的10:00-13:00这段期间的每50分钟为一组 的资料
因此还盼望版友们能指点,先谢谢了
也谢谢愿意了解我问题的各位
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.135.101.201 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1608473172.A.9A9.html
1F:推 TitanEric: 先滤开始跟结束时间 再aggregate看看 12/21 08:01
T大,不好意思,你所谓滤掉开始跟结束意思是要我每一天都分成
10:00-10:50 10:50-11:40 11:40-12:30 12:30-13:00,这些组别吗
但我不知道该怎麽样去分会比较快....因为资料数多的时候
我用for回圈跑有点久,所以想请教版友们是否有相关指令可以分享
谢谢
※ 编辑: jasonhsu14 (61.230.21.32 台湾), 12/21/2020 16:17:25
2F:→ jiyu520: google pandas apply 12/21 18:07
先谢谢你意见,我想是我没表达清楚
我知道apply这个东西,也会使用
但我的整个问题是说,我不知道该如何以有效的方式去达成
取每一天的10:00-10:50 10:50-11:40 11:40-12:30 12:30-13:00
这些时间区间,并将我的资料分别依照这些期间去分组
再分别取出第一笔、最後一笔与最大最小等,本来是想用resample方式
但该方法无法按照我希望的分类,目前是用for回圈方式,但效率差
所以想询问版友是有无效率较好的方式
apply确实是比for有效,但我想不到该如何用apply以达成我的需求
还盼望指教了,谢谢
※ 编辑: jasonhsu14 (220.135.101.201 台湾), 12/21/2020 19:06:46
3F:推 andy19960407: 直觉会是新增一个栏位定义时间区段 然後groupby 12/21 21:01
4F:推 lycantrope: 不想新增栏位就用pd.cut 12/22 11:00
5F:推 jiyu520: 对的 我知道你表达目的, 你可以将你要做的事项写成func 12/22 12:48
6F:→ jiyu520: 然後对资料表使用apply 12/22 12:49
7F:→ jiyu520: 所以步骤我想像中或许可以是 12/22 12:50
8F:→ jiyu520: 1. 对时间栏位进行判断後新增"时间组别标签栏位" 12/22 12:51
9F:→ jiyu520: 2. groupby对某值栏位进行agg取出 max min first last 12/22 12:52
10F:推 jiyu520: pandas栏位比值运算/query/apply 应该都可以做到1的步骤 12/22 12:55
11F:→ jiyu520: 可能直接栏位比值就可以达到需求~ 12/22 12:56
先谢谢楼上几位意见,我会再尝试看看各位提出的方法,希望能顺利达成我需求
也感谢各位的拨空协助
※ 编辑: jasonhsu14 (220.135.101.201 台湾), 12/22/2020 19:14:56
12F:推 aassdd926: 有个 between_time 的api 可以试试用这个过滤 12/23 23:53