我有一个大型数据集,其中包含数十年来的地下水测量结果。每天进行多次测量(有些每小时一次,其他每 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/