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

У меня есть следующий фрейм данных:

d = {'item': [1, 2,3,4,5,6], 'time': [1297468800, 1297468809, 12974688010, 1297468890, 1297468820,1297468805]}
df = pd.DataFrame(data=d)

вывод df выглядит следующим образом:

   item         time
0     1   1297468800
1     2   1297468809
2     3   1297468801
3     4   1297468890
4     5   1297468820
5     6   1297468805

time здесь основано на времени unixsystem.Моя цель - заменить столбец time в кадре данных.

, например

mintime = 1297468800
maxtime = 1297468890

И я хочу разделить время на интервал 10 (можно изменить с помощью параметра, например, 20 интервалов) и перекодировать столбец time вdf.Например,

   item         time
0     1          1
1     2          1
2     3          1
3     4          9
4     5          3
5     6          1

, какой самый эффективный способ сделать это, поскольку у меня есть миллиард записей?Спасибо

1 Ответ

0 голосов
/ 24 февраля 2019

Вы можете использовать pd.cut с np.linspace, чтобы указать ячейки.Это кодирует ваш столбец категорически, из которого вы можете затем извлечь коды в следующем порядке:

bins = np.linspace(df.time.min() - 1, df.time.max(), 10)
df['time'] = pd.cut(df.time, bins=bins, right=True).cat.codes + 1
df

   item  time
0     1     1
1     2     1
2     3     1
3     4     9
4     5     3
5     6     1

В качестве альтернативы, в зависимости от того, как вы обрабатываете интервалы, вы также можете сделать

bins = np.linspace(df.time.min(), df.time.max() + 1, 10)
pd.cut(df.time, bins=bins, right=False).cat.codes + 1

0    1
1    1
2    1
3    9
4    2
5    1
dtype: int8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...