У меня есть таблица данных. Я хочу построить график. (см. пример данных для вставки в конце) Для этого я хотел бы создать узлы и края. У каждого клиента go разные состояния процесса. Ребра соединяют два состояния (узла). Моя цель - получить ребра, как показано на скриншоте таблицы Excel, и дельта-время каждого изменения времени.
Мой код: Сначала я отсортировал таблицу по клиенту и по метке времени (т.е. узлы (состояния) go от t1 до t2 до t3 ... где t1
estados=estados.sort_values(['CLIENT', 'timestamp'], ascending=[True, True])
И теперь следует код 20% pythoni c и код 0% pandoni c:
edges_column = []
delta_column = []
for client in list_of_clients:
client_df = estados.loc[estados['CLIENT'] == client,['node','timestamp']]
client_nodes = client_df['node']
client_timestamps = client_df['timestamp']
list_edges = [node1 + '-' + node2 for node1,node2 in zip(client_nodes[:-1],client_nodes[1:])]
list_delta_times = [t2 -t1 for t1,t2 in zip(client_timestamps[:-1],client_timestamps[1:])]
print(list_edges)
print(list_delta_times)
# adding ['-'] because if there are n nodes there are n-1 edges. the same for delta times
edges_column = edges_column + list_edges + ['-']
delta_column = delta_column + list_delta_times + ['-']
# adding the columns edges_column and delta_column
print(len(edges_column))
estados['edge'] = edges_column
estados['deltatime'] = delta_column
Этот код работает, но он далек от идеала. Это должно быть довольно распространенной проблемой. Мне нужен более эффективный код, потому что у меня полмиллиона строк, и он должен выполняться в разумные сроки.
Я ищу функцию для создания края столбцов и метки времени. Я не могу прийти к такому решению, потому что функция относится к значениям из двух разных строк, а не только к одному, в таком случае я мог бы сделать что-то вроде
estados['edge'] = estados['node'].apply(function)
потому что мне нужно передать два значения, а не одно.
Есть ли вообще способ без использования циклов for?
thx.
![enter image description here](https://i.stack.imgur.com/VqUuO.jpg)
т таблица имеет формат pandas:
ПРИМЕЧАНИЕ1 для копирования и вставки JSON файл: {"КЛИЕНТ": {"0": "client1", "1": "client1", "2" : "client1", "3": "client1", "4": "client2", "5": "client2", "6": "client2", "7": "client3", "8": " client4 "," 9 ":" client4 "," 10 ":" client4 "," 11 ":" client4 "," 12 ":" client4 "," 13 ":" client4 "}," node ": {" 0 »:« A »,« 1 »:« B »,« 2 »:« C »,« 3 »:« H »,« 4 »:« B »,« 5 »:« F »,« 6 »:« G »,« 7 »:« C »,« 8 »:« D »,« 9 »:« E »,« 10 »:« F »,« 11 »:« H »,« 12 ":" G "," 13 ":" K "}," timestamp ": {" 0 ": 1590684862000," 1 ": 1590771262270," 2 ": 1590857662000," 3 ": 1590598462000," 4 ": 1590425662000 , «5»: 1590512062000, «6»: 1590598462000, «7»: 1590771262270, «8»: 1588352062000, «9»: 1588524862000, «10»: 1588611262000, «11»: 1588697662000, «12»: 1588956862000, « 13 ": 1589043262000}}