用于在数据框中选择最接近所选时间的每日值的 Python 函数

标签 python pandas time

我有一个大型数据集,其中包含数十年来的地下水测量结果。每天进行多次测量(有些每小时一次,其他每 10/15 分钟一次)。测量的确切时间可能会有所不同,具体取决于测量设备、网络使用情况和数据传输方法,并且(在大多数情况下)不会设置为秒。

我目前正在寻找一种在数据库中呈现数据的方法,该方法每天只能显示每个位置的一个测量值。我正在寻找一种方法来选择最接近上午 12 点的每个位置的每日值(value)。

pd. Between_time 无法解决此问题,因为在某些情况下,在上午 12 点之前和之后直接进行测量。我想选择最接近中午 12 点的值(上午 12 点之前或之后)。

由于数据集的大小,性能需要很快。有一些方法可以使用 for 循环解决这个问题,但性能会很慢。

下面是数据集的一小部分。

        Time                 B33
 0      2017-11-26 11:30:03  -2.57
 1      2017-11-26 11:45:01  -2.58
 2      2017-11-26 12:00:02  -2.58
 3      2017-11-26 12:15:04  -2.58
 4      2017-11-26 12:30:27  -2.58
 5      2017-11-26 12:45:01  -2.59

是否有一种快速方法可以从数据框中的列中选择最接近上午 12 点或任何其他选定时间的每日值?

最佳答案

使用merge_asof使用 direction='nearest' 参数和带有您需要的日期时间的助手 DataFrame:

df['Time'] = pd.to_datetime(df['Time'])

df1 = (df.assign(Time1 = df['Time'].dt.normalize() + pd.Timedelta(12, unit='H'))[['Time1']]
         .drop_duplicates())
print (df1)
                Time1
0 2017-11-26 12:00:00

df = pd.merge_asof(df1, df, left_on='Time1', right_on='Time', direction='nearest')
print (df)
                Time1                Time   B33
0 2017-11-26 12:00:00 2017-11-26 12:00:02 -2.58

关于用于在数据框中选择最接近所选时间的每日值的 Python 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59369862/

相关文章:

python - 尝试基于三个条件创建新的 id 列时出现问题?

算法时间复杂度分析(三个嵌套的for循环)

java - Robot 的 getPixelColor(int x, int y) 方法如何工作?

python - 在 Django 中获取 'most popular' 列表

python - 如何在python中解码(双重) 'url-encoded'字符串

python - NoReverseMatch at/app/index 我已经 URL

python - 如何在 Python 中聚合某些列,同时保留其他列

python-3.x - pandas 列出相同的索引

Python:使用 "..%(var)s.."% locals() 是一个好习惯吗?

oracle仅插入时间