Нужно выбрать ряды панд. DataFrame по последним 5 датам (Timestamp) - PullRequest
1 голос
/ 27 октября 2019

У меня есть фрейм данных:

|-    |   USER        |        Timestamp     |

|   0 | A    | 2019-10-01 08:32:29.608000    |

|   1 | A    | 2019-10-01 08:32:34.541000    |

|   2 | A    | 2019-10-01 08:32:35.863001    |

|   3 | A    | 2019-10-01 08:32:35.864002    |

|   4 | A    | 2019-10-01 08:32:36.398003    |

|   5 | A    | 2019-10-01 08:32:39.517000    |

|   6 | A    | 2019-10-01 08:32:39.567005    |

|   7 | A    | 2019-10-01 08:32:41.039000    |

 ...

| 130 | B    | 2019-10-01 22:12:21.966022    |

| 131 | B    | 2019-10-01 22:12:23.549023    |

| 132 | B    | 2019-10-01 22:12:24.977024    |

| 133 | B    | 2019-10-01 22:12:25.922025    |

| 134 | B    | 2019-10-01 22:12:26.935026    |

| 135 | B    | 2019-10-01 22:12:28.487027    |

| 136 | B    | 2019-10-01 22:12:29.593028    |

| 137 | B    | 2019-10-01 22:12:31.926029    |

из фрейма данных. Я хочу оставить только строки последние 5 временных меток для для каждого пользователя .

Я пробовал индексировать, меняя dtype на datetime64 [нс].

Вот что я ожидаю: ТОЛЬКО 5 последних отметок времени для каждого пользователя

|     | USER |           Timestamp           |

|   3 | A    | 2019-10-01 08:32:35.864002    |

|   4 | A    | 2019-10-01 08:32:36.398003    |

|   5 | A    | 2019-10-01 08:32:39.517000    |

|   6 | A    | 2019-10-01 08:32:39.567005    |

|   7 | A    | 2019-10-01 08:32:41.039000    |

| ... 

| 133 | B    | 2019-10-01 22:12:25.922025    |

| 134 | B    | 2019-10-01 22:12:26.935026    |

| 135 | B    | 2019-10-01 22:12:28.487027    |

| 136 | B    | 2019-10-01 22:12:29.593028    |

| 137 | B    | 2019-10-01 22:12:31.926029    |

PS Также вы можете упоминать отметку времени в порядке возрастания,Я думал, пытался использовать по индексу, к сожалению, тип панды - объект.

1 Ответ

1 голос
/ 27 октября 2019

Использование DataFrame.sort_values с GroupBy.tail:

df = df.sort_values('Timestamp')
df = df.groupby('USER').tail(5)
print (df)
    USER                  Timestamp
3      A 2019-10-01 08:32:35.864002
4      A 2019-10-01 08:32:36.398003
5      A 2019-10-01 08:32:39.517000
6      A 2019-10-01 08:32:39.567005
7      A 2019-10-01 08:32:41.039000
133    B 2019-10-01 22:12:25.922025
134    B 2019-10-01 22:12:26.935026
135    B 2019-10-01 22:12:28.487027
136    B 2019-10-01 22:12:29.593028
137    B 2019-10-01 22:12:31.926029
...