我有一个难以解释的问题。我想比较同一辆车的车型,但我有三个标准:
首先:我想比较基线与同一辆车的不同型号。在我的数据集中,基线表示Car = Model。例如,在这种情况下,前三个观测值是基线,也是第6,第7和第8个观测值
第二:我对将BMW X5与另一辆BMW X5或X6进行比较并不感兴趣,并且彼此也有基线
第三:我正在进行哪种速度测试并不重要。例如,我可以将观察的speed_test_1与观察的speed_test_3进行比较Forth:我想在不同的速度测试中得到最小的差异,不等于零
Index Car Model Speed_test_1 Speed_test_2 Speed_test_3
0 BMW BMW 13 23 14
1 BMW BMW 23 29 27
2 BMW BMW 12 23 45
3 BMW X5 32 15 63
4 BMW X5 35 23 23
5 BMW X6 33 24 14
6 Fiat Fiat 23 23 24
7 Fiat Fiat 22 25 24
8 Fiat Fiat 23 23 21
9 Fiat P_2 28 29 30
10 Fiat p_3 29 28 33
举一个例子:我获得菲亚特的最小距离是菲亚特(指数= 7; speed_test_2 = 25) - 菲亚特(指数= 9; speed_test_1 = 28)或者它可以是菲亚特(指数= 10; speed_test_2 = 28)。它可能是菲亚特(指数= 6:speed_test_1) - 菲亚特(指数= 7:speed_test_3)但请回想一下我没有比较基线
结果输出应如下所示:
Car Baseline min
BMW BMW 1
Fiat Fiat 3
答案 0 :(得分:0)
#define a function to find min diff according to the conditions listed in the question.
def find_min(x):
base = x.iloc[:,-3:].astype(float).values
others = df.loc[(df.Car==min(x.Car))&(df.Model!=min(x.Model))].iloc[:,-3:].astype(float).values
min_diff = np.min(np.where(abs(base[:,None]-others)==0, np.inf, abs(base[:,None]-others)))
return min_diff
#apply the function to each Car-Model Baseline group to get non-0 mins.
df.loc[df.Car==df.Model].groupby(['Car','Model']).apply(lambda x: find_min(x))
Out[1405]:
Car Model
BMW BMW 1.0
Fiat Fiat 3.0