python - 迭代自身的多个条件应用函数

标签 python pandas geopy

所以我有一个 Dataframe,它有 348 次相同的内容,但具有不同的日期作为静态列。我想要做的是添加一个列来检查该日期,然后使用纬度/经度列和 geopy 计算 20 英里内的行数。

我的框架是这样的:

enter image description here

我想要做的是一个类似于 apply 函数的东西,它获取等于该列的所有标识日期,然后运行此:

geopy.distance.vincenty(x, y).miles

X 是位置的纬度/经度,y 是迭代的纬度/经度。我想要上面的位置数 < 20。然后我想将此计数存储为初始数据帧中的一列。

<小时/>

我对 Pandas 很满意,但这超出了我的舒适区。谢谢。

最佳答案

我从这个 DataFrame 开始(因为我不想手动输入那么多内容,并且您没有提供任何数据代码):

df
   Index    Number        la                 ID 
0   0          1    [43.3948, -23.9483]     1/1/90
1   1          2    [22.8483, -34.3948]     1/1/90
2   2          3    [44.9584, -14.4938]     1/1/90
3   3          4    [22.39458, -55.34924]   1/1/90 
4   4          5    [33.9383, -23.4938]     1/1/90
5   5          6    [22.849, -34.397]       1/1/90

现在我引入了一个人工柱子,它只是为了帮助我们获得距离的笛卡尔积

df['join'] = 1
df_c = pd.merge(df, df[['la', 'join','Index']], on='join')

下一步是通过 .apply 应用 vincenty 函数并将结果存储在额外的列中

df_c['distance'] = df_c.apply(lambda x: distance.vincenty(x.la_x, x.la_y).miles, 1)

现在我们有了原始矩阵的笛卡尔积,这意味着我们也有了每个城市与其自身的比较。但我们将在下一步中通过执行 -1 来考虑这一点。我们按 Index_x 进行分组,并对所有小于 20 英里的距离进行求和。

df['num_close_cities'] = df_c.groupby('Index_x').apply(lambda x: sum((x.distance < 20))) -1

df.drop('join', 1)

    Index   Number  la                      ID      num_close_cities
0   0         1     [43.3948, -23.9483]     1/1/90  0
1   1         2     [22.8483, -34.3948]     1/1/90  1
2   2         3     [44.9584, -14.4938]     1/1/90  0
3   3         4     [22.39458, -55.34924]   1/1/90  0
4   4         5     [33.9383, -23.4938]     1/1/90  0
5   5         6     [22.849, -34.397]       1/1/90  1

关于python - 迭代自身的多个条件应用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57503646/

相关文章:

python - 根据数据类型从 DataFrame 中删除列

python - 如何确定找到的两个键是否属于字典列表中的同一字典

python - 使用伪造的 mongoDB 进行 pytest 测试

python - 分隔 Pandas 数据框中共享同一列的月份和年份

python-3.x - 基于另一列合并 pandas 数据框中的间隔

python - 对非地址进行地理编码 : Geopy

python - pandas - 计算出达到一个 pct 需要多少行

python - Pandas 数据框作为 matplotlib.pyplot.boxplot 的输入

python - 如何检查一个点是否在给定半径内?

python - 我从 Python 中的地理编码器中提取的一些坐标没有保存在我创建的变量中