Python 从组合字典创建双向表

Python 从组合字典创建双向表,python,pandas,dictionary,Python,Pandas,Dictionary,我正在编写一个简单的代码,以获得不同城市之间距离的双向表 基本上,我有一个城市列表(比如3个:巴黎、柏林、伦敦),我用itertools创建了它们之间的组合(所以我有巴黎-柏林、巴黎-伦敦、柏林-伦敦)。我从一个网站解析了距离,并将它们保存在一本字典中(因此我有:{Paris:{Berlin:878.36,London:343.67},Berlin:{London:932.14}) 现在我想创建一个双向表,这样我就可以在Excel中查找一对城市(不幸的是,我需要它在Excel中,否则在Pytho

我正在编写一个简单的代码,以获得不同城市之间距离的双向表

基本上,我有一个城市列表(比如3个:巴黎、柏林、伦敦),我用itertools创建了它们之间的组合(所以我有巴黎-柏林、巴黎-伦敦、柏林-伦敦)。我从一个网站解析了距离,并将它们保存在一本字典中(因此我有:
{Paris:{Berlin:878.36,London:343.67},Berlin:{London:932.14}


现在我想创建一个双向表,这样我就可以在Excel中查找一对城市(不幸的是,我需要它在Excel中,否则在Python中,所有这些都是不必要的!),并返回距离。表格必须完整(即不是三角形,以便我可以查找伦敦-巴黎或巴黎-伦敦,并且行/列对上的值都必须在那里)。这样的事情容易做到吗?我在想我可能需要填我的字典(即创建类似于巴黎:{Paris:878.36,伦敦343.67},柏林:{Paris:878.36,伦敦:932.14},伦敦:{Paris:343.67,柏林:932.14}),然后喂大熊猫,但不确定这是最快的方法。谢谢!

我想这可以满足你的需要:

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)
输出:

从到距离
0柏林-巴黎878.36
1伦敦-巴黎343.67
伦敦柏林932.14
3巴黎柏林878.36
4巴黎-伦敦343.67
5柏林-伦敦932.14

到目前为止您尝试了什么?请提供您的代码!虽然我将df=pd.concat([df,df.reindex(columns=['To','From','Distance']),sort=False)更改为df=pd.concat([df,df.rename(columns={'From':'To','To':'From']),因为您的基本上是在不改变顺序的情况下重新创建相同的df(从你的桌子上可以看到,你有两次柏林-巴黎,但没有巴黎-柏林)。不过,它很有魅力!