我有list
形式的以下源路径-
['node_A','node_B','node_C', 'node_D']
还有其他几种源路径,上面仅是一个示例。
Node_B
是node_A
的来源,node_C
是node_B
的来源,依此类推。SOURCE DESTINATION
node_B node_A
node_C node_B
node_D node_C
我有一个
dataframe
,其中包含以下列-source destination cost_1 cost_2 cost_3 cost_4
node_B node_A 1 5 7 5
node_C node_B 3 1 2 1
node_D node_C 1 5 1 5
node_Y node_X 3 2 7 1
node_Z node_Y 1 5 1 2
根据我的源路径,我想在相应的源节点和目标节点上过滤
dataframe
并求和这些对的成本。例如,在上面的源路径['node_A','node_B','node_C', 'node_D']
中,我应该得到如下内容-source_path cost_1 cost_2 cost_3 cost_4
['node_A','node_B','node_C', 'node_D'] 5 11 10 11
我可以通过基于源和目标对(针对源路径的3对对中的每对)过滤
dataframe
来实现此目的。然后,我将3行附加在一起,然后对成本进行求和。但是,这需要花费大量时间。是这样做的有效方法吗?如果需要,我可以在此处粘贴我的代码。 最佳答案
从列表,DataFrame
中创建具有原始,merge
和最后一次整形的sum
一行DataFrame
:
L = ['node_A','node_B','node_C', 'node_D']
df1 = (pd.DataFrame({'source':L[1:], 'destination':L[:-1]})
.merge(df)
.drop('destination', 1)
.sum()
.to_frame()
.T
.assign(source=[L])
.rename(columns={'source':'source_path'}))
print (df1)
source_path cost_1 cost_2 cost_3 cost_4
0 [node_A, node_B, node_C, node_D] 5 11 10 11