Как отсортировать по 2 переменным и выбрать по 1 переменной, чтобы создать фрейм данных - PullRequest
0 голосов
/ 08 октября 2019

Я хотел бы сначала отсортировать данные по Timestamp, затем по group_Id. Оттуда я хотел бы выбрать все соответствующие данные для Timestamp с 1/1/18 по 7/1/18 и сохранить их в формате данных с именем df1, чтобы я мог загрузить их в модель машинного обучения.

Мои данные выглядят так.

Id      Timestamp       Data  group_Id
5999    1/1/18 0:00     25.5    101
6000    1/1/18 0:00     25      101
6001    1/1/18 0:00     27      52
6002    1/1/18 0:00     26.5    52
6003    1/1/18 0:00     25.5    50
6004    1/1/18 0:00     25      50
6005    1/1/18 0:00     37      14
6006    1/1/18 0:00     36.5    14
6007    1/1/18 0:00     30.5    85
6008    1/1/18 0:00     30      85
...          ...        ...     ..

Посоветуйте, пожалуйста, как мне это сделать. Нужно ли экспортировать Dataframe df1 из Colab? Спасибо.

В ответ на ответ @MyNameIsCaleb я запустил воспроизводимые данные и получил следующий результат, но есть 2 проблемы: 1) group_Id не отсортирован 2) уменьшено количество строк (извините, я думаюМне было неясно, в чем заключается моя цель. Я хотел отсортировать данные и извлечь данные за 10 дней, которые относятся к определенному периоду времени (скажем, 2018/08/08 - 2018/08/14), и создать новый Dataframe со всеми строками. между датами.

     Id  Timestamp  Data  group_Id
3  6002 2019-02-01  26.5        52
4  6003 2019-03-01  25.5        50
1  6000 2019-04-01  25.0       101
5  6004 2019-05-01  25.0        50
6  6005 2019-06-01  37.0        14
7  6006 2019-07-01  36.5        14

На реальных данных выдает ошибку:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-63-e7bd6eb249eb> in <module>()
      2 day1 = datetime.strptime('2018-08-13', '%Y-%m-%d')
      3 day2 = datetime.strptime('2018-08-19', '%Y-%m-%d')
----> 4 df1 = df.loc[df['Timestamp'].between(day1, day2)].sort_values(by=['Timestamp', 'group_Id'])

2 frames
/usr/local/lib/python3.6/dist-packages/pandas/core/generic.py in _get_label_or_level_values(self, key, axis)
   1704             values = self.axes[axis].get_level_values(key)._values
   1705         else:
-> 1706             raise KeyError(key)
   1707 
   1708         # Check for duplicates

KeyError: 'group_Id'

Я не уверен, что могло пойти не так. Спасибо.

1 Ответ

0 голосов
/ 08 октября 2019

Вы можете сделать это, используя

df2 = df.loc[df['Timestamp'].between(date1, date2)].sort_values(by=['Timestamp', 'group_Id'])

.between как указано, вы должны использовать объекты datetime для правильной обработки с вашим столбцом datetime. sort_values может создавать несколько столбцов одновременно.

Вы хотите выполнить сортировку после выбора между ними, чтобы не сортировать каждый элемент, а только выбранные, если только вы не планируете продолжать использовать df и не нуждаетесь в необходимостиэто также сортировалось, в этом случае просто поместите это прежде на основной df.

import pandas as pd
from datetime import datetime

df = pd.DataFrame({
    'Id': [5999, 6000, 6001, 6002, 6003, 6004, 6005, 6006, 6007, 6008],
    'Timestamp': ['8/1/19 00:00', '4/1/19 00:00', '1/1/19 00:00', '2/1/19 00:00', '3/1/19 00:00', '5/1/19 00:00', '6/1/19 00:00', '7/1/19 00:00', '9/1/19 00:00', '10/1/19 00:00'],
    'Data': [25.5, 25, 27, 26.5, 25.5, 25, 37, 36.5, 30.5, 30],
    'group_Id': [101, 101, 52, 52, 50, 50, 14, 14, 85, 85]
})

df['Timestamp'] = pd.to_datetime(df['Timestamp'], format='%m/%d/%y %H:%M')

date1 = datetime.strptime('2019-01-31', '%Y-%m-%d')
date2 = datetime.strptime('2019-07-31', '%Y-%m-%d')

df2 = df.loc[df['Timestamp'].between(date1, date2)].sort_values(by=['Timestamp', 'group_Id'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...