python - 针对 dataframe2 中的所有行对 dataframe1 的每一行进行操作
问题描述
我的代码似乎可以完成这项工作,但我很难理解这个过程。
我有两个名为nodes_df、rents_df 的数据框。
租金_df:
lng lat
0 137.014525 27.142947
1 117.130288 17.813582
2 116.926154 47.886767
3 137.014442 37.578488
4 154.063238 57.568705
节点_df:
lng lat Location
0 124.044525 43.542947 A
1 147.110288 65.513582 B
2 136.936154 31.556767 C
3 147.464442 33.508488 D
4 157.163238 12.508705 E
对于位置“A”,我想比较它在rents_df中每行的距离,如果创建一个列,其中包含rents_df中的行数,即位置“A”内的100m
我在用
def haversine_np(lon1, lat1, lon2, lat2):
"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
"""
lon1, lat1, lon2, lat2 = map(np.radians, [lon1, lat1, lon2, lat2])
dlon = lon2 - lon1
dlat = lat2 - lat1
a = np.sin(
dlat / 2.0)**2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon / 2.0)**2
c = 2 * np.arcsin(np.sqrt(a))
km = 6371 * c
return km
nodes_df['count'] = nodes_df.apply(lambda row: sum(haversine_np(row.lng, row.lat, rents_df.lng, rents_df.lat)< 0.1), axis=1)
这似乎可以完成这项工作,但为什么呢?据我了解,我将两个坐标点和两个坐标系列发送到 hasrsine 函数中,但是如果它实际上将每一行与系列中的所有行进行比较,我会感到困惑。
我的结果会是这样的:
lng lat Location count
0 124.044525 43.542947 A 2
1 147.110288 65.513582 B 4
2 136.936154 31.556767 C 1
3 147.464442 33.508488 D 3
但想确定我是否可以信任计数列。4 157.163238 12.508705 E
解决方案
推荐阅读
- php - 在 Laravel 中更新两个连接表是否有通用方法?
- db2 - IBM DB2 Case in Where 子句?
- python - 多个标签的 Tkinter 动态事件绑定
- html - 带参数的文件输入多个
- python - 将 ibmcloud github 问题导出到 CSV
- javascript - 如何拆分内容并附加在 HTML 标记中
- reactjs - 可以使用 React 测试库测试自定义 Material-UI 组件吗?
- powerbi - 具有更改开始日期的日历表
- fullcalendar - 在 eventSources 中过滤源
- java - 错误无法加载类“org.slf4j.impl.StaticLoggerBinder”Apache Kafka