我有一个数据集,其中有两个目的地以及它们之间的距离!
城市1 | 城市2 | 距离 |
---|---|---|
101 | 102 | 56 |
102 | 103 | 34 |
103 | 104 | 6 |
105 | 106 | 15 |
106 | 107 | 9 |
107 | 108 | 90 |
我想准备一个表,其中包含以city1为索引、以city2为列的累积距离!并且距离的值必须是累加和。 对角线元素也必须为 0!
尝试使用 cumsum 首先找到累积和,并将其添加为新列 -
df3['cs'] = np.cumsum(df3['distance'])
我尝试使用枢轴方法执行此操作。
pivot_table = df3.pivot(索引='city1',columns='city2',values='cs')
我想要对角线列为 0 的结果,其他列是累积和....
谁有解决办法吗?预先感谢!
您发送的数据样本存在一个小问题。您似乎错过了从城市 104 到城市 105 的路线。
无论如何,这里有一个可能有帮助的 Python 代码。它计算数据集中城市之间的距离:
import pandas as pd
import numpy as np
# Sample data
data = {
'city1': [101, 102, 103, 105, 106, 107],
'city2': [102, 103, 104, 106, 107, 108],
'distance': [56, 34, 6, 15, 9, 90]
}
# Create DataFrame
df = pd.DataFrame(data)
cities = df[['city1', 'city2']].values.flatten()
df_2 = pd.DataFrame(index=np.unique(cities), columns=list(cities))
# compute distance
combination_cities = np.array(np.meshgrid(cities, cities)).T.reshape(-1, 2)
def compute_distance(c1, c2):
if c1>c2:
c1,c2 = c2,c1
if c1 == c2:
return 0
else:
distances = {}
destination_city=None
from_city = c1
while destination_city != c2:
df_tmp = df[df['city1'] == from_city]
if df_tmp.empty:
return np.nan
destination_city = df_tmp['city2'].values[0]
distance = df_tmp['distance'].values[0]
distances[destination_city] = distance
from_city = destination_city
return sum(distances.values())
for c1,c2 in combination_cities:
distance = compute_distance(c1, c2)
df_2.loc[c1, c2] = distance
df_2.loc[c2, c1] = distance
# df_2 = df_2.fillna(0)
print(df_2)