gpt4 book ai didi

python - 如何使用列表对 Pandas 数据框进行子集化

转载 作者:太空宇宙 更新时间:2023-11-04 05:38:18 25 4
gpt4 key购买 nike

我有一个像这样的 Pandas 数据框。

     order_id   latitude  longitude 
0 519 19.119677 72.905081
1 520 19.138250 72.913190
2 521 19.138245 72.913183
3 523 19.117662 72.905484
4 524 19.137793 72.913088
5 525 19.119372 72.893768
6 526 19.116275 72.892951
7 527 19.133430 72.913268
8 528 19.136800 72.917185
9 529 19.118284 72.901114
10 530 19.127193 72.914269
11 531 19.114269 72.904039
12 532 19.136292 72.913941
13 533 19.119075 72.895115
14 534 19.119677 72.905081
15 535 19.119677 72.905081

还有一个 list

DB
Out[658]:
[['523'],
['526', '533'],
['527', '528', '532', '535'],
['530', '519'],
['529', '531', '525', '534'],
['520', '521', '524']]

现在我想在列表元素上对数据框进行子集化。列表中有 6 个元素,每个元素都有一个 order_id 的子列表。因此,对于每个子元素,我都需要相应的纬度和经度。然后我想计算每个 order_id location 之间的 haversine 距离:

 DB[2]
['527', '528', '532', '535']

然后我想在主数据框上为纬度和经度对设置子集。所以它应该返回一个像这样的数组:

array([[ 19.11824057,  72.8939447 ],
[ 19.1355074 , 72.9147978 ],
[ 19.11917348, 72.90518167],
[ 19.127193 , 72.914269 ]])

(只是一个例子,不是正确的经纬度对)。

我正在做以下事情:

db_lat  = []
db_long = []
for i in range(len(DB)):
l = len(DB[i])
for j in range(l):
db_lat.append(tsp_data_unique.latitude[tsp_data_unique['order_id'] ==
''.join(DB[i][j])])
db_long.append(tsp_data_unique.longitude[tsp_data_unique['order_id']
== ''.join(DB[i][j])])

但它为我提供了数据库中所有纬度和经度的列表。在这里我无法区分哪些纬度和经度属于哪些数据库元素。因此,对于每个数据库元素(在我的例子中是 6 个),我需要 6 个纬度和经度数组。请帮忙。

最佳答案

首先,我会将您的 int 列转换为 str 以将数据框与列表的值进行比较:

df['order_id'] = df['order_id'].apply(str)

然后在order_id上设置索引:

df = df.set_index('order_id')

然后你可以这样做:

pairs = df.loc[DB[2]].values

获取:

array([[ 19.13343 ,  72.913268],
[ 19.1368 , 72.917185],
[ 19.136292, 72.913941],
[ 19.119677, 72.905081]])

编辑:遍历您的列表,然后您可以:

In [93]: for i in range(len(DB)):
....: p = df.loc[DB[i]].values
....: print p
....:
[[ 19.117662 72.905484]]
[[ 19.116275 72.892951]
[ 19.119075 72.895115]]
[[ 19.13343 72.913268]
[ 19.1368 72.917185]
[ 19.136292 72.913941]
[ 19.119677 72.905081]]
[[ 19.127193 72.914269]
[ 19.119677 72.905081]]
[[ 19.118284 72.901114]
[ 19.114269 72.904039]
[ 19.119372 72.893768]
[ 19.119677 72.905081]]
[[ 19.13825 72.91319 ]
[ 19.138245 72.913183]
[ 19.137793 72.913088]]

关于python - 如何使用列表对 Pandas 数据框进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34907010/

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