- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个通过合并原始 DF 和原始 DF 的重新采样版本创建的 DF。重新采样的版本是 Bin_time
和ave_knots
在联合领域合并ID
创建这个 DF。
id trip_id knots times Bin_time ave_knots
0 5045493 10789 6.4924256 5/6/15 17:48 5/6/15 17:30 3.376727771
1 5045494 10789 12.537768 5/6/15 17:53 5/6/15 18:00 2.592866578
2 5045495 10789 9.136048 5/6/15 18:03 5/6/15 18:30 1.109755927
3 5045496 10789 6.4341104 5/6/15 18:04 5/6/15 19:00 1.447413169
4 5045497 10789 10.7688736 5/6/15 18:04 5/6/15 19:30 1.900643556
5 5045498 10789 10.41250293 5/6/15 18:09
6 5045499 10789 11.22891573 5/6/15 18:41
7 5045500 10789 12.04532853 5/6/15 18:46
8 5045501 10789 12.86174133 5/6/15 19:08
我想做的是 times
中的时间戳适合重新采样的Bin_time
,附加 Bin_time
和ave_knots
到该行的末尾。这是一个配对数据示例,最终它将必须处理 3 - 5 百万行。
我尝试了几种不同的方法,例如df['test'] = np.where(df.times > (df.Bin_time - dt.timedelta(minutes=30)) & (df.times < df.Bin_time ))
并合并到单个值辅助列上 suggested here 。该解决方案的问题在于,它通过将重新采样的 DF 与原始 DF 的每个条目合并,创建了一个巨大的 DF。当我尝试在较大的 DF 上运行脚本时,这导致我的计算机崩溃。如果我将 DF 读入 CSV,我就可以工作了,但是 this solution速度慢且效率低,所以我试图保留 Pandas,因为我相信它应该提供更快的解决方案。
期望的结果
id trip_id knots times Bin_time ave_knots
0 5045493 10789 6.4924256 5/6/15 17:48 5/6/15 17:30 3.376727771
1 5045494 10789 12.537768 5/6/15 17:53 5/6/15 17:30 3.376727771
2 5045495 10789 9.136048 5/6/15 18:03 5/6/15 18:00 2.592866578
3 5045496 10789 6.4341104 5/6/15 18:04 5/6/15 18:00 2.592866578
4 5045497 10789 10.7688736 5/6/15 18:04 5/6/15 18:00 2.592866578
5 5045498 10789 10.41250293 5/6/15 18:09 5/6/15 18:00 2.592866578
6 5045499 10789 11.22891573 5/6/15 18:41 5/6/15 18:30 1.109755927
7 5045500 10789 12.04532853 5/6/15 18:46 5/6/15 18:30 1.109755927
8 5045501 10789 12.86174133 5/6/15 19:08 5/6/15 19:00 1.447413169
最佳答案
我首先将重新采样的输出与原始数据帧分开。我已将您的示例复制到以下代码中,希望能够模仿您的实际数据(请注意,日期列应解释为实际的日期时间对象,否则这将不起作用)。
import pandas as pd
from StringIO import StringIO
df = pd.read_table(StringIO("""
id trip_id knots times
5045493 10789 6.4924256 5/6/15-17:48
5045494 10789 12.537768 5/6/15-17:53
5045495 10789 9.136048 5/6/15-18:03
5045496 10789 6.4341104 5/6/15-18:04
5045497 10789 10.7688736 5/6/15-18:04
5045498 10789 10.41250293 5/6/15-18:09
5045499 10789 11.22891573 5/6/15-18:41
5045500 10789 12.04532853 5/6/15-18:46
5045501 10789 12.86174133 5/6/15-19:08"""), sep='\s+', parse_dates=[3])
df2 = pd.read_table(StringIO("""
Bin_time ave_knots
5/6/15-17:30 3.376727771
5/6/15-18:00 2.592866578
5/6/15-18:30 1.109755927
5/6/15-19:00 1.447413169
5/6/15-19:30 1.900643556"""), sep='\s+', parse_dates=[0])
df2 = df2.set_index('Bin_time', drop=False)
df2 = df2.reindex(df['times'], method='ffill').reset_index(drop=True)
df = pd.concat([df, df2[['Bin_time', 'ave_knots']]], axis=1)
这可以通过将df2
上的索引设置为Bin_time
列来实现,这样使用“前向填充”的重新索引
将自动放置垃圾箱在正确的地方。您可以阅读说明here关于填充缺失数据。
然后,您必须使用 reset_index
取回 df
中存在的简单整数索引,以便 pd.concat
将它们放入正确的地方。
我不知道这是否是最节省内存的,但它应该可以非常干净地工作。
输出df
如下所示:
id trip_id knots times Bin_time ave_knots
0 5045493 10789 6.492426 2015-05-06 17:48:00 2015-05-06 17:30:00 3.376728
1 5045494 10789 12.537768 2015-05-06 17:53:00 2015-05-06 17:30:00 3.376728
2 5045495 10789 9.136048 2015-05-06 18:03:00 2015-05-06 18:00:00 2.592867
3 5045496 10789 6.434110 2015-05-06 18:04:00 2015-05-06 18:00:00 2.592867
4 5045497 10789 10.768874 2015-05-06 18:04:00 2015-05-06 18:00:00 2.592867
5 5045498 10789 10.412503 2015-05-06 18:09:00 2015-05-06 18:00:00 2.592867
6 5045499 10789 11.228916 2015-05-06 18:41:00 2015-05-06 18:30:00 1.109756
7 5045500 10789 12.045329 2015-05-06 18:46:00 2015-05-06 18:30:00 1.109756
8 5045501 10789 12.861741 2015-05-06 19:08:00 2015-05-06 19:00:00 1.447413
关于python - Pandas DF,不等列中的条件选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34072966/
谁能解释为什么这些 JavaScript 数组不等式比较的计算结果为真? [""] !== [""] [1] !== [1] [] !== [] [""] != [""] [1] != [1] []
好的,所以我一直在努力学习掌握子进程并正确地等待它们完成。我已经阅读了很多 Stack Overflow Q/A,但我似乎仍然无法按照我的意愿让它工作。我一直在阅读/搜索这本书(C++ Primer
根据this , !==! 是不等于字符串运算符。尝试一下,我得到: C:\> if "asdf" !==! "fdas" echo asdf !==! was unexpected at this
这是一道面试题: Suppose: I have 100 trillion elements, each of them has size from 1 byte to 1 trillion byte
如何集成功能 f(y) w.r.t 时间;即 'y'是一个包含 3000 个值和值 time(t) 的数组从 1 到 3000 不等。所以,在整合 f(y) 后我需要 3000 个值. 积分将是不确定
我是一名优秀的程序员,十分优秀!