gpt4 book ai didi

python - 基于距离最小化连接 Pandas 数据帧

转载 作者:行者123 更新时间:2023-11-28 22:12:34 26 4
gpt4 key购买 nike

我有一个商店数据集,其中包含每日时间戳的二维位置。我正在尝试将每一行与在其他一些位置的站点进行的天气测量以及每日时间戳进行匹配,以便最小化每个商店和匹配站点之间的笛卡尔距离。天气测量并非每天都进行,而且站点位置可能会有所不同,因此这是在每个特定日期为每个特定商店找到最近的站点的问题。

我意识到我可以构造嵌套循环来执行匹配,但我想知道这里是否有人可以想出一些巧妙的方法来使用 pandas 数据帧操作来完成此操作。玩具示例数据集如下所示。为简单起见,它具有静态气象站位置。

store_df = pd.DataFrame({
'store_id': [1, 1, 1, 2, 2, 2, 3, 3, 3],
'x': [1, 1, 1, 4, 4, 4, 4, 4, 4],
'y': [1, 1, 1, 1, 1, 1, 4, 4, 4],
'date': [1, 2, 3, 1, 2, 3, 1, 2, 3]})

weather_station_df = pd.DataFrame({
'station_id': [1, 1, 1, 2, 2, 3, 3, 3],
'weather': [20, 21, 19, 17, 16, 18, 19, 17],
'x': [0, 0, 0, 5, 5, 3, 3, 3],
'y': [2, 2, 2, 1, 1, 3, 3, 3],
'date': [1, 2, 3, 1, 3, 1, 2, 3]})

下面的数据是期望的结果。我包含 station_id 只是为了说明。

   store_id  date  station_id  weather
0 1 1 1 20
1 1 2 1 21
2 1 3 1 19
3 2 1 2 17
4 2 2 3 19
5 2 3 2 16
6 3 1 3 18
7 3 2 3 19
8 3 3 3 17

最佳答案

解题思路是对所有组合建表,

df = store_df.merge(weather_station_df, on='date', suffixes=('_store', '_station'))

计算距离

df['dist'] = (df.x_store - df.x_station)**2 + (df.y_store - df.y_station)**2

并选择每组的最小值:

df.groupby(['store_id', 'date']).apply(lambda x: x.loc[x.dist.idxmin(), ['station_id', 'weather']]).reset_index()

如果你有很多约会对象,你可以按组加入。

关于python - 基于距离最小化连接 Pandas 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54699174/

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