python - k=1 的最近邻距离(以时间为单位)

标签 python pandas datediff nearest-neighbor date-difference

我有以下数据框

A_key      Date
      A1      2016-05-03
      A1      2016-09-25
      A2      2015-02-25
      A2      2015-02-25
      A3      2015-10-04
      A3      2016-03-15
      A3      2016-04-10
      A4      2015-09-26
      A4      2015-09-26

我想为 n_neighbor(k) = 1 以天为单位获取每个不同 A_key 的最近邻距离,这样输出如下所示

      A_key      Date       Distance
      A1      2016-05-03     145
      A1      2016-09-25     145
      A2      2015-02-25     0
      A2      2015-02-25     0
      A3      2015-10-04     163
      A3      2016-03-15     26
      A3      2016-04-10     26
      A4      2015-09-26     0
      A4      2015-09-26     0

最佳答案

这基于 groupby 将您的原始 df 拆分为小的唯一关键数据帧,然后我们使用 numpy 广播来加速整个计算

df.Date=pd.to_datetime(df.Date)
l=[]
for _, x in df.groupby('A_key'):
    s=np.abs((x['Date'].values - x['Date'].values[:,None])).astype('timedelta64[D]').astype(int)
    s[[np.arange(len(s))] * 2]=9999
    l.append(np.min(s,1))

df['New']=np.concatenate(l)
df
Out[501]: 
  A_key       Date  New
0    A1 2016-05-03  145
1    A1 2016-09-25  145
2    A2 2015-02-25    0
3    A2 2015-02-25    0
4    A3 2015-10-04  163
5    A3 2016-03-15   26
6    A3 2016-04-10   26
7    A4 2015-09-26    0
8    A4 2015-09-26    0

关于python - k=1 的最近邻距离(以时间为单位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54226075/

相关文章:

python - 为什么 Flask SQL Alchemy 允许保存 None 主键?

python - Postgres `INSERT INTO` 替换条目而不是添加新条目

python - 从真值表 pandas 中提取数据

python - 在数据帧的列上使用 sklearn 的 LabelEncoder

python - 因 pdb 中的异常而暂停

python - 如何在pandas中存储mongoDB嵌套文档而不重复

python - 使用 Python Pandas 读取 excel 并隔离列/行以进行绘图

java - 使用 JPA Criteria Query 比较两个日期之间的差异

sql - SQL DATEDIFF(year, ..., ...) 是一种昂贵的计算吗?

javascript - JavaScript 中两个日期之间的月差