让我们尝试一下pdist https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/generated/scipy.spatial.distance.pdist.html + squareform https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.spatial.distance.squareform.html#scipy.spatial.distance.squareform要创建一个表示日期时间对象之间成对差异的平方距离矩阵,最后从该方阵创建一个新的数据框:
from scipy.spatial.distance import pdist, squareform
i, d = test_df['id'].values, pd.to_datetime(test_df['date'])
df = pd.DataFrame(squareform(pdist(d[:, None])), dtype='timedelta64[ns]', index=i, columns=i)
或者,您也可以使用计算距离矩阵numpy
广播:
i, d = test_df['id'].values, pd.to_datetime(test_df['date']).values
df = pd.DataFrame(np.abs(d[:, None] - d), index=i, columns=i)
N1 N2 N3
N1 0 days 28 days 39 days
N2 28 days 0 days 11 days
N3 39 days 11 days 0 days