基于datafram循环的Python列表理解

2024-04-20 14:11:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我在找一些我找不到答案的非常具体的东西。在

我有两个数据帧。包含ID、纬度和经度的人。另一个只有身份证

我想在一个列表中存储纬度和经度,只要dataframea中的ID存在于dataframeb中,就可以使用list comprehension。我可以让第一部分工作得很好,但是匹配id似乎是个问题。到目前为止,我得到的是:

heat_data = [[row['latitude'],row['longitude']] for index, row in extract.iterrows() if row['NBN Location Id'] in closed['SP Order Location ID']]

对我来说,这意味着只要ID存在于另一个数据帧中(closed),就存储extract中的“latitude”和“longitude”。但是,这将导致不检索任何数据。谁能告诉我我哪里出错了吗?如果我排除最后一个“If”语句,就可以了。我还能怎么做这个if语句呢?在

谢谢!在


Tags: 数据答案inidifextractlocation语句
2条回答

我认为列表理解是不必要的,更好更快的方法是使用矢量化解决方案,通过使用^{}和{a2}进行过滤,然后转换为列表:

mask = extract['NBN Location Id'].isin(closed['SP Order Location ID'])
cheat_data = extract.loc[mask, ['latitude', 'longitude']].values.tolist()

样本

^{pr2}$

您的解决方案失败了,因为在pandascheck index values中的不是Series的值,因此需要转换为列表:

cheat_data = [[row['latitude'],row['longitude']] for index, row in extract.iterrows() 
              if row['NBN Location Id'] in closed['SP Order Location ID'].tolist()]
print (cheat_data)
[['lat1', 'long1'], ['lat3', 'long3'], ['lat4', 'long4']]

#changed index values
closed = pd.DataFrame({'SP Order Location ID':list('ace')}, index=list('dbw'))
print (closed)
  SP Order Location ID
d                    a
b                    c
w                    e

cheat_data = [[row['latitude'],row['longitude']] for index, row in extract.iterrows() 
              if row['NBN Location Id'] in closed['SP Order Location ID']]
print (cheat_data)

[['lat2', 'long2'], ['lat4', 'long4']]

使用@jezrael的数据

ids = {*closed['SP Order Location ID']}
cols = ['latitude', 'longitude', 'NBN Location Id']
[p for *p, i in zip(*map(extract.get, cols)) if i in ids]

[['lat1', 'long1'], ['lat3', 'long3'], ['lat4', 'long4']]

^{pr2}$

相关问题 更多 >