【问题标题】:Python function for selection in dataframe of daily value closest to selected time用于在数据框中选择最接近所选时间的每日值的 Python 函数
【发布时间】:2020-04-09 16:45:04
【问题描述】:

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

我目前正在寻找一种在数据库中显示数据的方法,该方法每天只能显示每个位置的一次测量值。我正在寻找一种方法来选择最接近凌晨 12 点的每个位置的每日价值。

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 点或任何其他选定时间的每日值?

【问题讨论】:

    标签: python pandas time


    【解决方案1】:

    merge_asofdirection='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
    

    【讨论】:

    • 不错的解决方案!我正在将 12:00 转换为秒并通过 diff 找到最接近的秒..
    猜你喜欢
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2021-11-15
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多