python - 在熊猫中获得超过阈值的第一个记录的最快方法是什么?
问题描述
我想设置一个函数,以便对于一个表中的每一行,我得到比另一个表中的记录更大的最近记录。这些值是日期时间/时间戳。
我做了这个函数,然后我把它打包如下:
重要的提示:
此函数假定数据帧已排序
def get_closest(dt_value, df, column='DateTime', value_column='SampleNumber'):
filtered_df = df[df[column] >= dt_value][0:1]
[sample_number] = filtered_df[value_column].values.tolist()
return sample_number
然后我将它打包如下
def v_get_closest(a, df2):
return a.apply(lambda x : get_closest(x, df2))
我将应用于更大的 Spark 应用程序中的数十亿行,但这对问题并不重要。
有没有更快的方法来实现这一点?
编辑:表 A
Datetime Value
0 2015-01-25 14:14:23 0.911291
1 2015-01-25 12:25:33 0.396191
2 2015-01-25 14:48:00 0.040370
3 2015-01-25 22:56:34 0.422482
4 2015-01-25 09:11:09 0.314022
5 2015-01-25 17:38:26 0.969917
6 2015-01-25 01:53:39 0.508699
7 2015-01-25 15:58:50 0.972176
8 2015-01-25 16:49:45 0.112304
9 2015-01-25 07:02:37 0.950211
10 2015-01-25 01:50:14 0.729004
11 2015-01-25 08:15:49 0.828108
12 2015-01-25 21:03:15 0.842581
13 2015-01-25 03:31:36 0.694799
14 2015-01-25 05:37:49 0.521695
15 2015-01-25 13:21:42 0.150373
16 2009-01-25 01:12:00 0.502133
表 B
DateTime Key
1 2010-10-13 18:32:00 2
2 2016-05-13 01:12:03 1
用法:
#returns the column
v_get_closest(A['datetime'] , B)
预期的:
Datetime Value Key
0 2015-01-25 14:14:23 0.911291 1
1 2015-01-25 12:25:33 0.396191 1
2 2015-01-25 14:48:00 0.040370 1
3 2015-01-25 22:56:34 0.422482 1
4 2015-01-25 09:11:09 0.314022 1
5 2015-01-25 17:38:26 0.969917 1
6 2015-01-25 01:53:39 0.508699 1
7 2015-01-25 15:58:50 0.972176 1
8 2015-01-25 16:49:45 0.112304 1
9 2015-01-25 07:02:37 0.950211 1
10 2015-01-25 01:50:14 0.729004 1
11 2015-01-25 08:15:49 0.828108 1
12 2015-01-25 21:03:15 0.842581 1
13 2015-01-25 03:31:36 0.694799 1
14 2015-01-25 05:37:49 0.521695 1
15 2015-01-25 13:21:42 0.150373 1
16 2009-01-25 01:12:00 0.502133 2
解决方案
2009 行在预期结果中的作用在哪里?对我来说,这看起来可以用 pd.merge_asof 解决。
df = pd.merge_asof(df1.sort_values(by='DateTime'),
df2.sort_values(by='DateTime'),
on='DateTime'
direction='forward')
推荐阅读
- flutter - “目前不支持flutter web”
- c++ - C++:C2280 错误:无法将矩阵条目设置为给定值
- python-3.x - 在 Pandas Python 中连接帧时的日期格式更改
- instagram - Instagram 禁止我的服务器 IP 地址使用 __a=1 api
- dhall - 将不同模式与联合值相关联的惯用方式是什么?
- angular - Angular (8) - Foreach 循环调用 subscribe 和 ForkJoin 他们(见描述)
- javascript - 生命之虫游戏
- vb.net - Vb.net Itextsharp OCR 检查
- function - OCaml 幂函数
- c# - 数据库中的空外键 - 但为什么呢?