【问题标题】:Extracting any 2 rows from a df that satisfy conditions - Pandas从满足条件的 df 中提取任意 2 行 - Pandas
【发布时间】:2019-03-07 15:45:03
【问题描述】:

我正在尝试使用 df(以下 7 行采样)来提取满足 3 个条件的任意两行:

  1. 第一个位置之间的距离小于 x 英里使用 Haversine
  2. 使用 Haversine 与第二个位置之间的距离小于 x 英里
  3. 创建时间的差异小于 x 分钟

Haversine 只是简单地内置在 python 中

示例

from haversine import haversine

lyon = (45.7597, 4.8422) # (lat, lon)
paris = (48.8567, 2.3508)

haversine(lyon, paris, unit='mi')
243.71201856934454  # in miles

当我说第一个位置之间的差异时,这只是第一个位置之间的差异,不考虑第二个位置或第二个坐标(因此任何两个订单第一个位置之间的 x 英里差异和任何两个之间 x 英里的差异订购第二个位置)

       DAY     Order  1st_latitude  1st_longitude 2nd_latitude 2nd_longitude    created_time
        1/3/19  234e    32.69        -117.1          32.63      -117.08   3/1/19 19:00
        1/3/19  235d    40.73        -73.98          40.73       -73.99   3/1/19 23:21
        1/3/19  253w    40.76        -73.99          40.76       -73.99   3/1/19 15:26
        2/3/19  231y    36.08        -94.2           36.07       -94.21   3/2/19 0:14
        3/3/19  305g    36.01        -78.92          36.01       -78.95   3/2/19 0:09
        3/3/19  328s    36.76        -119.83         36.74       -119.79  3/2/19 4:33
        3/3/19  286n    35.76        -78.78          35.78       -78.74   3/2/19 0:43

感谢观看

【问题讨论】:

  • 我听不懂Distance between 1st location。能举个分步计算的例子吗?
  • 抱歉 - 第一个位置之间的距离将是数据框中彼此相距小于 x 英里或相距 x 英里的任何订单。因此,使用 Haversine 将计算第 1 lat 和 1st long 的行和第 1 lat 和 1st long 的行之间的差异,这有意义吗? @giser_yugang
  • @Chris90 你应该想出评估为TrueFalse 的条件,然后将它们输入到我给出的答案中。
  • 我明白你的答案是什么,但我不知道如何应用它来计算数据框中各行之间的差异

标签: python pandas filter difference haversine


【解决方案1】:

一般语法是:

answerdf = df.loc[df[<cond1> & <cond2> & <cond3>]]

提出你自己的条件来替换上面的内容,你会得到答案,因为你的问题没有清楚地解释你的条件是什么

&lt;cond&gt; 的示例:

haversine((df['1st_latitude'], df['1st_longitude']),(df['2nd_latitude'], df['2nd_longitude']) , unit='mi') &gt; 100

当放入上面时:

answerdf = df.loc[df[haversine((df['1st_latitude'], df['1st_longitude']),(df['2nd_latitude'], df['2nd_longitude']) , unit='mi') > 100]]

【讨论】:

  • 很抱歉 - 我已经写出了条件并从 1-3 编号?条件是第一个位置坐标距离必须小于 x 英里,第二个位置坐标相同,创建时间差必须小于 x 分钟。
  • 我明白你在说什么,但我不知道如何将条件应用于数据帧行中的计算
  • @Chris90,您的条件不是代码形式。通过代码形式,它类似于haversine((df['1st_latitude'], df['1st_longitude']),(df['2nd_latitude'], df['2nd_longitude']) , unit='mi') &gt; 100
  • 但我不是在寻找第一个和第二个位置的半正弦距离......只是每行第一个位置的距离差。然后是每行第二个位置的英里数差异
  • 答案是查看第一个和第二个坐标之间的差异,这不是我想要的。我想输出一个数据框,其中包含彼此相距 x 英里的所有记录 第一个位置坐标,第二个位置相同,时间字段相差 x 分钟
猜你喜欢
  • 1970-01-01
  • 2015-09-29
  • 2020-02-11
  • 2020-09-11
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多