Pandas 如何仅选择数据帧时间窗口中的最新值?

Pandas 如何仅选择数据帧时间窗口中的最新值?,pandas,dataframe,Pandas,Dataframe,我有一个数据帧,它应该被分成15分钟的时间窗口,也许可以通过使用一个新的列来标记它们,每个窗口都有一个唯一的标识符。然后我只想保留每个时间窗口的最新测量值。因此,如果在一个时间窗口内有两个“b”的测量值,则只保留最新的测量值,而删除较早的测量值 那么,假设我们有以下数据: |**datetime** |**measurement**|**value**| |----------------|---------------|---------| |2018-07-18T0642Z|"a"

我有一个数据帧,它应该被分成15分钟的时间窗口,也许可以通过使用一个新的列来标记它们,每个窗口都有一个唯一的标识符。然后我只想保留每个时间窗口的最新测量值。因此,如果在一个时间窗口内有两个“b”的测量值,则只保留最新的测量值,而删除较早的测量值

那么,假设我们有以下数据:

|**datetime**    |**measurement**|**value**|
|----------------|---------------|---------|
|2018-07-18T0642Z|"a"            |5347     |
|2018-07-18T0641Z|"b"            |8345     |
|2018-07-18T0640Z|"c"            |1256     |
|2018-07-18T0630Z|"b"            |7485     |
|2018-07-18T0629Z|"a"            |2536     |
|2018-07-18T0629Z|"b"            |5943     |
作为数据帧,它是这样的:

import pandas as pd
df = pd.DataFrame(
         [
             ["2018-07-18T0642Z", "a", 5347],
             ["2018-07-18T0641Z", "b", 8345],
             ["2018-07-18T0640Z", "c", 1256],
             ["2018-07-18T0630Z", "b", 7485],
             ["2018-07-18T0629Z", "a", 2536],
             ["2018-07-18T0629Z", "b", 5943],
         ],
         columns = [
             "datetime",
             "measurement",
             "value"
         ]
    )
df["datetime"] = pd.to_datetime(df["datetime"])
df.index       = df["datetime"]
del df["datetime"]
添加列以标记时间窗口后,它将变为以下内容:

|**datetime**    |**measurement**|**value**|**time_window**|
|----------------|---------------|---------|---------------|
|2018-07-18T0642Z|"a"            |5347     |2              |
|2018-07-18T0641Z|"b"            |8345     |2              |
|2018-07-18T0640Z|"c"            |1256     |2              |
|----------------|---------------|---------|---------------|
|2018-07-18T0630Z|"b"            |7485     |1              |
|2018-07-18T0629Z|"a"            |2536     |1              |
|2018-07-18T0629Z|"b"            |5943     |1              |
现在,只保留每个窗口中的最新测量值,这意味着时间窗口1的第一个“b”测量值被删除:

|**datetime**    |**measurement**|**value**|**time_window**|
|----------------|---------------|---------|---------------|
|2018-07-18T0642Z|"a"            |5347     |2              |
|2018-07-18T0641Z|"b"            |8345     |2              |
|2018-07-18T0640Z|"c"            |1256     |2              |
|----------------|---------------|---------|---------------|
|2018-07-18T0630Z|"b"            |7485     |1              |
|2018-07-18T0629Z|"a"            |2536     |1              |
熊猫是如何做到这一点的?

我认为需要:

print (df)
           datetime measurement  value
0  2018-07-18T0642Z           a   5347
1  2018-07-18T0641Z           b   8345
2  2018-07-18T0640Z           c   1256
3  2018-07-18T0630Z           b   7485
4  2018-07-18T0629Z           b   2536 <- changed a to b
5  2018-07-18T0629Z           b   5943


df['datetime'] = pd.to_datetime(df['datetime'])
#convert datetimes to 10Min precision
df['date'] = df['datetime'].dt.floor('10Min')
#remove duplicates per columns, keep only first dupe
df = df.drop_duplicates(['measurement','date'])
print (df)
             datetime measurement  value                date
0 2018-07-18 06:42:00           a   5347 2018-07-18 06:40:00
1 2018-07-18 06:41:00           b   8345 2018-07-18 06:40:00
2 2018-07-18 06:40:00           c   1256 2018-07-18 06:40:00
3 2018-07-18 06:30:00           b   7485 2018-07-18 06:30:00
4 2018-07-18 06:29:00           b   2536 2018-07-18 06:20:00

#remove helper column date
df = df.drop('date',axis=1)
print (df)
             datetime measurement  value
0 2018-07-18 06:42:00           a   5347
1 2018-07-18 06:41:00           b   8345
2 2018-07-18 06:40:00           c   1256
3 2018-07-18 06:30:00           b   7485
4 2018-07-18 06:29:00           b   2536
打印(df)
日期时间测量值
0 2018-07-18T0642Z a 5347
2018-07-18T0641Z b 8345
2 2018-07-18T0640Z c 1256
3 2018-07-18T0630Z b 7485

4 2018-07-18T0629Z b 2536 Ah super,非常感谢您的指导!