选择Pandas DataFrame中每5个整数或最接近的浮点值



我有一个分钟频率DataFrame和一个与每分钟时间相关联的单个值:

2021-08-02 08:58:00-05:00  90.17
2021-08-02 08:59:00-05:00  90.31
2021-08-02 09:00:00-05:00  90.45
2021-08-02 09:01:00-05:00  90.60
2021-08-02 09:02:00-05:00  90.74
2021-08-02 09:03:00-05:00  90.88
2021-08-02 09:04:00-05:00  91.02
2021-08-02 09:05:00-05:00  91.17
2021-08-02 09:06:00-05:00  91.31
2021-08-02 09:07:00-05:00  91.46
2021-08-02 09:08:00-05:00  91.60
2021-08-02 09:09:00-05:00  91.75
2021-08-02 09:10:00-05:00  91.89
2021-08-02 09:11:00-05:00  92.04
2021-08-02 09:12:00-05:00  92.18
2021-08-02 09:13:00-05:00  92.33
2021-08-02 09:14:00-05:00  92.48
2021-08-02 09:15:00-05:00  92.63
2021-08-02 09:16:00-05:00  92.77
2021-08-02 09:17:00-05:00  92.92
2021-08-02 09:18:00-05:00  93.07
2021-08-02 09:19:00-05:00  93.22
2021-08-02 09:20:00-05:00  93.37
2021-08-02 09:21:00-05:00  93.52
2021-08-02 09:22:00-05:00  93.67
2021-08-02 09:23:00-05:00  93.82
2021-08-02 09:24:00-05:00  93.98
2021-08-02 09:25:00-05:00  94.13
2021-08-02 09:26:00-05:00  94.28
2021-08-02 09:27:00-05:00  94.43
2021-08-02 09:28:00-05:00  94.59
2021-08-02 09:29:00-05:00  94.74
2021-08-02 09:30:00-05:00  94.90
2021-08-02 09:31:00-05:00  95.05
2021-08-02 09:32:00-05:00  95.21
2021-08-02 09:33:00-05:00  95.37

我要做的是选择每五个整数或下一个最近的浮点数。例如

2021-08-02 08:57:00-05:00  90.03
2021-08-02 09:31:00-05:00  95.05

我觉得我是在正确的轨道上使用下面的代码来选择每个整数值,但我不知道如何展开它来得到我正在寻找的…

resample = df[df['AZ'].map(lambda x: x.is_integer())]

导致……

11:22:00                   121
12:39:00                   160
13:33:00                   201
14:55:00                   241

如果您知道范围内每个可以被5整除的值都有一行靠近它,您可以:

df['closest_5'] = (df['value'] / 5).round(0) * 5
df['distance_to_closest_5'] = (df['value'] - df['closest_5']).abs()
resample = df.sort_values(['closest_5', 'distance_to_closest_5'].drop_duplicates('closest_5', keep='first')[['time', 'value']]

最新更新