我有各个店铺的周销售数据,格式如下:
pd.DataFrame({'Store':['S1', 'S1', 'S1', 'S2','S2','S2','S3','S3','S3'], 'Week':[1, 2, 3,1,2,3,1,2,3],
'Sales' : [20,30,40,21,31,41,22,32,42],'Cust_count' : [2,4,6,3,5,7,4,6,8]})
Store Week Sales Cust_count
0 S1 1 20 2
1 S1 2 30 4
2 S1 3 40 6
3 S2 1 21 3
4 S2 2 31 5
5 S2 3 41 7
6 S3 1 22 4
7 S3 2 32 6
8 S3 3 42 8
正如您所看到的,数据以存储一周为单位,并且我想计算同一周内每个商店之间的欧几里得距离,然后取计算出的距离的平均值。例如,对于商店S1和S2的计算如下:
For week 1: sqrt((20-21)^2 + (2-3)^2) = sqrt(2)
For week 2: sqrt((30-31)^2 + (4-5)^2) = sqrt(2)
For week 3: sqrt((40-41)^2 + (6-7)^2) = sqrt(2)
The final value for distance between S1 and S2 = sqrt(2) which is calculated as
average distance of the 3 weeks i.e. (3 * sqrt(2)) / 3
最终输出应该如下所示:
S1 S2 S3
S1 0 1.414 2.818
S2 1.414 0 some val
S3 2.818 some val 0
我对数据框中的列分组使用groupby函数和使用scipy.spatial.distance.cdist计算欧几里德距离有一些想法,但我无法将这些概念联系起来并找到解决方案。
.fillna(0)
即可按照你所需的方式工作。在描述的情况下,你现在应该获得S1和S2的值为14.42530798568652
。 - ALollz