我有以下数据框
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/