我正在编写一个简单的代码,以获取两座城市之间的双向距离表。
基本上,我有一个城市列表(仅说3个:巴黎,柏林,伦敦),我用itertools在它们之间创建了一个组合(所以我有巴黎-柏林,巴黎-伦敦,柏林-伦敦)。我解析了距网站的距离并将其保存在字典中(因此,我得到了{Paris: {Berlin : 878.36, London : 343.67}, Berlin : {London : 932.14}}
)。
现在,我想创建一个双向表,以便我可以在Excel中查找一对城市(不幸的是,我在Excel中需要它,否则,对于Python,这一切都是不必要的!),并且要保持距离背部。该表必须完整(即不是三角形的,以便我可以查找London-Paris或Paris-London,并且行/列对上都必须有该值)。这样的事情容易实现吗?我当时在想可能需要填写我的字典(即创建类似{ Paris : {Berlin : 878.36, London 343.67}, Berlin : {Paris : 878.36, London : 932.14}, London : {Paris : 343.67, Berlin : 932.14}
的字典),然后将其提供给Pandas,但不确定这是最快的方法。谢谢!
答案 0 :(得分:1)
我认为这可以满足您的需求
import pandas as pd
data = {'Paris': {'Berlin': 878.36, 'London': 343.67}, 'Berlin': {'London': 932.14}}
# Create data frame from dict
df = pd.DataFrame(data)
# Rename index
df.index.name = 'From'
# Make index into a column
df = df.reset_index()
# Turn destination columns into rows
df = df.melt(id_vars='From', var_name='To', value_name='Distance')
# Drop missing values (distance to oneself)
df = df.dropna()
# Concatenate with itself but swapping the order of cities
df = pd.concat([df, df.rename(columns={'From' : 'To', 'To': 'From'})], sort=False)
# Reset index
df = df.reset_index(drop=True)
print(df)
输出:
From To Distance
0 Berlin Paris 878.36
1 London Paris 343.67
2 London Berlin 932.14
3 Paris Berlin 878.36
4 Paris London 343.67
5 Berlin London 932.14