Преобразование кадра данных на основе нескольких идентификаторов и разбиение двух столбцов на последовательность столбцов - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть данные ниже:

import pandas as pd
data = {'origin':  [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    'destination': [2, 2, 2, 2, 2, 2, 3, 3, 3, 3],
    'set': [1, 1, 1, 2, 2, 2, 1, 1, 1, 1],
    'pointA': [1, 11, 12, 1, 11, 13, 1, 16, 17, 18],
    'pointB': [11, 12, 2, 11, 13, 2, 16, 17, 18, 3],
    'time': [5, 6, 5, 5, 5, 7, 8, 7, 3, 4]}
datainput = pd.DataFrame(data, columns = ['origin','destination','set', 'pointA', 'pointB', 'time'])

, который выглядит примерно так:

origin  destination  set  pointA  pointB  time
  1         2         1      1      11     5
  1         2         1      11     12     6
  1         2         1      12     2      5
  1         2         2      1      11     5
  1         2         2      11     13     5
  1         2         2      13     2      7
  1         3         1      1      16     8
  1         3         1      16     17     7
  1         3         1      17     18     3
  1         3         1      18     3      4

Я бы хотел объединить столбцы pointA и pointB в серию точек при суммированиивремя, т. е. наличие по одной строке для каждого уникального [источника, назначения, набора], поэтому желаемый вывод будет выглядеть примерно так:

origin  destination  set  point1  point2  point3  point4  point5 time
  1         2         1     1       11      12      2       0     16
  1         2         2     1       11      13      2       0     17
  1         3         1     1       16      17      18      3     22

Для начала я попробовал функцию pivot, как показано ниже:

pivot = datainput.pivot_table(index=['origin', 'destination', 'set'], values=['time'], aggfunc='sum').reset_index()

Это может дать мне сумму времени для уникального [источник, пункт назначения, набор]. Однако я изо всех сил пытаюсь добавить точку А и точку В к изображению, являющемуся точкой 1, точкой 2 и т. Д.

Я исследовал потенциал транспонирования:

transposedData = datainput.T

Но это простотранспонирует фрейм данных, заканчивающийся тем, что множество [origin, destination, set] преобразуется в столбцы. также трудно работать с заданным количеством максимальных точек для уникального [origin, destination, set], также неизвестно, здесь я использую 5 для выборки данных, однако, мой входной файл будет массивным, и я неНе знаю, какое максимальное число.

Есть идеи, как это сделать? ссылки на чтения о путях также будут оценены.

Спасибо!

1 Ответ

0 голосов
/ 07 ноября 2019

Это должно сработать:

import numpy as np

datainput["pointC"]=list(zip(datainput["pointA"], datainput["pointB"]))

res=pd.pivot_table(datainput, index=["origin", "destination", "set"], aggfunc=lambda x: (np.unique(np.hstack(x.values.ravel()).astype(str))).tolist(), values=["pointC"]).pointC.apply(pd.Series).fillna(0).reset_index()

Вывод:

origin  destination  set  0   1   2   3  4
0       1            2    1  1  11  12   2  0
1       1            2    2  1  11  13   2  0
2       1            3    1  1  16  17  18  3

[Program finished]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...