gpt4 book ai didi

python - MultiIndex 来自不规则长度的列表

转载 作者:行者123 更新时间:2023-12-01 01:40:09 27 4
gpt4 key购买 nike

我有一个列表列表,我想将其制成多索引 Pandas 数据框,然后可以合并到原始 Pandas 数据框。列表的每一行都包含一个观察值,列表中的值由与该观察值匹配的相应行组成。

这是我所拥有的一个简单版本:

原始数据框具有以下形式:

original=(pd.DataFrame([['JFK','New York, NY'],['EWR','Newark, NJ'],
['BWI','Baltimore, MD'],['PHL','Philadelphia, PA'],
['DCA','Washington, DC']],columns=['ID','City']))
original
ID City
0 JFK New York, NY
1 EWR Newark, NJ
2 BWI Baltimore, MD
3 PHL Philadelphia, PA
4 DCA Washington, DC

匹配输出(将位置与特定半径内的其他位置匹配)是一个列表列表,如下所示:
matches=[[0],[1,3],[2],[1,3],[4]]
matches
[[0], [1, 3], [2], [1, 3], [4]]

这是我希望它看起来的样子:
              ID              City
Org Match
0 0 JFK New York, NY
1 1 EWR Newark, NJ
3 PHL Philadelphia, PA
2 2 BWI Baltimore, MD
3 1 EWR Newark, NJ
3 PHL Philadelphia, PA
4 4 DCA Washington, DC

我知道如何加入多索引级别,但无法弄清楚如何正确使用多索引。最终,这将需要大规模进行。也乐于以不同的方式接近。

根本问题是将位置与给定距离内的所有其他位置匹配。这是在一个单独的模块中完成的,输出是上面引用的列表列表。

最佳答案

我会构建索引,与 original 合并和 set_index :

ret = (pd.concat(pd.DataFrame({'Org':i, 'Match':v}) for i,v in enumerate(matches))
.merge(original, left_on='Match', right_index=True, how='left')
.set_index(['Org','Match'])
)

输出:
            ID              City
Org Match
0 0 JFK New York, NY
1 1 EWR Newark, NJ
3 PHL Philadelphia, PA
2 2 BWI Baltimore, MD
3 1 EWR Newark, NJ
3 PHL Philadelphia, PA
4 4 DCA Washington, DC

关于python - MultiIndex 来自不规则长度的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58940018/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com