Как пересчитать данные в Pandas с дискретными данными? - PullRequest
0 голосов
/ 20 октября 2018

Я застрял с пандами.Моя идея заключается в повторной выборке данных, которые выражены факторами.Например, я наблюдал двух кошек по имени Чарльз и Валентина.Поскольку животные выражают поведение в течение более длительного времени, наблюдения проводятся при изменении текущего поведения.Я хочу выполнить повторную выборку, чтобы получить данные по минутам

name;timestamp;activity
Charles;10.10.18 12:31;drinks
Charles;10.10.18 12:51;sleep
Charles;10.10.18 13:01;mouse
Valentine;10.10.18 12:31;drinks
Valentine;10.10.18 12:51;sleep
Valentine;10.10.18 13:01;purr

Мой желаемый результат должен выглядеть следующим образом:

name    timestamp   activity
Charles 10.10.18 12:31  drinks
Charles 10.10.18 12:32  drinks
Charles 10.10.18 12:33  drinks
Charles 10.10.18 12:34  drinks
Charles 10.10.18 12:35  drinks
Charles 10.10.18 12:36  drinks
Charles 10.10.18 12:37  drinks
Charles 10.10.18 12:38  drinks
Charles 10.10.18 12:39  drinks
Charles 10.10.18 12:40  drinks
Charles 10.10.18 12:41  drinks
Charles 10.10.18 12:42  drinks
Charles 10.10.18 12:43  drinks
Charles 10.10.18 12:44  drinks
Charles 10.10.18 12:45  drinks
Charles 10.10.18 12:46  drinks
Charles 10.10.18 12:47  drinks
Charles 10.10.18 12:48  drinks
Charles 10.10.18 12:49  drinks
Charles 10.10.18 12:50  drinks
Charles 10.10.18 12:51  sleeps
Charles 10.10.18 12:52  sleeps
Charles 10.10.18 12:53  sleeps
Charles 10.10.18 12:54  sleeps
Charles 10.10.18 12:55  sleeps
Charles 10.10.18 12:56  sleeps
Charles 10.10.18 12:57  sleeps
Charles 10.10.18 12:58  sleeps
Charles 10.10.18 12:59  sleeps
Charles 10.10.18 13:00  sleeps
Charles 10.10.18 13:01  mouse
Valentine   10.10.18 12:31  drinks
Valentine   10.10.18 12:32  drinks
Valentine   10.10.18 12:33  drinks
Valentine   10.10.18 12:34  drinks
Valentine   10.10.18 12:35  drinks
Valentine   10.10.18 12:36  drinks
Valentine   10.10.18 12:37  drinks
Valentine   10.10.18 12:38  drinks
Valentine   10.10.18 12:39  drinks
Valentine   10.10.18 12:40  drinks
Valentine   10.10.18 12:41  drinks
Valentine   10.10.18 12:42  drinks
Valentine   10.10.18 12:43  drinks
Valentine   10.10.18 12:44  drinks
Valentine   10.10.18 12:45  drinks
Valentine   10.10.18 12:46  drinks
Valentine   10.10.18 12:47  drinks
Valentine   10.10.18 12:48  drinks
Valentine   10.10.18 12:49  drinks
Valentine   10.10.18 12:50  drinks
Valentine   10.10.18 12:51  sleeps
Valentine   10.10.18 12:52  sleeps
Valentine   10.10.18 12:53  sleeps
Valentine   10.10.18 12:54  sleeps
Valentine   10.10.18 12:55  sleeps
Valentine   10.10.18 12:56  sleeps
Valentine   10.10.18 12:57  sleeps
Valentine   10.10.18 12:58  sleeps
Valentine   10.10.18 12:59  sleeps
Valentine   10.10.18 13:00  sleeps
Valentine   10.10.18 13:01  purr

Использование

data.resample('60S').pad() 

не работаетпоскольку Панды заявляют, что временные метки не являются уникальными.

Подмножество данных для одного кота за раз не очень помогло.

1 Ответ

0 голосов
/ 20 октября 2018

Вы определенно на правильном пути с pad.Следует отметить только следующее:

  • Для повторной выборки временного ряда необходимо, чтобы индекс фрейма данных состоял из времен, в которые необходимо выполнить повторную выборку.
  • Всякий раз, когда вам нужночтобы разделить данные так, чтобы каждое имя обрабатывалось по-разному, groupby - ваш друг.
  • При выполнении действия над группой результирующий временной ряд имеет (как часть) свой индекс столбец, используемый длягруппирование, поэтому некоторая комбинация reset_index, set_index, unstack и stack обычно может использоваться для преобразования результата в желаемую форму (но, если вы не возражаете, результат будет немного отличаться от желаемоговывод, скорее всего, вы можете пропустить эту часть).

Таким образом, вы можете позволить

df['timestamp'] = pd.to_datetime(df['timestamp'])
df.set_index('timestamp').groupby('name').resample('T').pad().activity.reset_index()

На практике:

In [54]: df

Out[54]:
        name           timestamp activity
0    Charles 2018-10-10 12:31:00   drinks
1    Charles 2018-10-10 12:51:00    sleep
2    Charles 2018-10-10 13:01:00    mouse
3  Valentine 2018-10-10 12:31:00   drinks
4  Valentine 2018-10-10 12:51:00    sleep
5  Valentine 2018-10-10 13:01:00     purr

In [91]: df.set_index('timestamp').groupby('name').resample('T').pad().activity.reset_index().head()
Out[91]:
      name           timestamp activity
0  Charles 2018-10-10 12:31:00   drinks
1  Charles 2018-10-10 12:32:00   drinks
2  Charles 2018-10-10 12:33:00   drinks
3  Charles 2018-10-10 12:34:00   drinks
4  Charles 2018-10-10 12:35:00   drinks
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...