【问题标题】:fast lookup with dictionary and pairs on series pandas dictionary map series快速查找字典和对系列熊猫字典地图系列
【发布时间】:2020-10-05 10:19:58
【问题描述】:

我有一个距离矩阵 A == > 直接 ==> B... Z

A == > 通过 ALPHA ==> B...Z

B == > 直接 ==> C..Z

我创建了一个字典,其工作原理如下:

#distances is populated with the distance value above
distances = pd.DataFrame.from_dict({ 'From' : ['A','A','A','B','B','C','C'],
                                  'via': ['d','s','d','d','d','d','s'],
                                  'To' : ['B','C','D','C','D','E','F']
                                  'Distance': [10,5,12,4,3,22,21]})
distances_dict = distances.set_index(['From', 'via', 'To']).to_dict('index')
new_distances = dict()
for key in distances_dict.keys():
        new_distances.update({key: distances_dict[key]['Distance']})
print(new_distances['A', 'd', 'B'])

我有一个 pandas df(1,000,000 行),我正在尝试计算每行的距离,但我将使用与上述相同的方法来简化。

a = distances
a['map'] = "'"+a['From']+"'"+",'"+a['via']+"',"+"'"+a['To']+"'"
a['Check Distance'] = a['map'].map(new_distances)
#yields NaN

有没有办法做到这一点?我正在查看相对大规模的字符串查找

【问题讨论】:

    标签: python pandas dictionary series lookup-tables


    【解决方案1】:

    你可以试试这个吗?

    a['Check Distance'] = a.apply(lambda x: distances_dict[(x['From'], x['via'], x['To'])]['Distance'],axis=1)

    【讨论】:

    • 鉴于速度/性能非常慢,我试图避免使用 apply。我的数据框最终可能有 20+mm 行
    猜你喜欢
    • 2017-12-15
    • 2016-09-22
    • 1970-01-01
    • 2019-09-28
    • 2017-09-23
    • 2017-02-25
    • 2018-02-26
    • 2020-09-25
    • 2015-06-23
    相关资源
    最近更新 更多