pandas客户表>>将边添加到节点列和增量时间

问题描述 投票:0回答:1

我有一个数据表,我想创建一个图形。 (请参见数据示例以末尾粘贴)为此,我想创建节点和边缘。每个客户经历不同的过程状态。边连接两个状态(节点)我的目标是获得excel表屏幕快照中所示的边缘以及每次更改的增量时间。

我的代码:首先,我按客户端和时间戳对表进行了排序(即节点(状态)从t1到t2到t3 ...其中t1

estados=estados.sort_values(['CLIENT', 'timestamp'], ascending=[True, True])

现在遵循20%的pythonic代码和0%的pandonic代码:

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

此代码有效,但远非理想。这应该是一个非常普遍的问题。我需要一个更有效的代码,因为我有50万行,并且应该在合理的时间内运行。

我正在寻找创建列边缘和时间戳的函数我不能采用这种解决方案,因为该函数是指两个不同行中的值,而不仅是ony,在这种情况下,我可以执行类似的操作

estados['edge'] = estados['node'].apply(function)

因为我必须传递两个值,而不仅仅是一个。

有没有使用for循环的方法吗?

thx。

enter image description here

表格为熊猫格式:

用于复制和粘贴JSON文件的注释:{“ CLIENT”:{“ 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”},“节点”:{“ 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“},”时间戳“ :{“ 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}}

python pandas timedelta
1个回答
1
投票

您可以在此处将df.shiftdf.shift一起使用。

pd.Series.str.cat
© www.soinside.com 2019 - 2024. All rights reserved.