我有一个这样的数据框:
Customer A B
[Boby 1 2]
[Alan 5 3]
[Tom 7 1]
注意:例如,这只是数据框的一部分(只有几千行,几十列)。
对于每对客户,我需要找到 A 和 B 每一行之间差异的平方和。
Boby-Alan 计算示例: ((1-5) ^ 2 + (2-3) ^ 2) = 16 + 1 = 17
鲍比-汤姆 ((1-7) ^ 2 + (2-1) ^ 2) = 36 + 1 = 37
艾伦-汤姆 ((5-7) ^ 2 + (3-1) ^ 2) = 4 + 4 = 8
问题 1:如何进行这样的计算?
我尝试搜索,但有一些带有循环的示例,但我无法弄清楚它们:(
问题 2:我应该以什么形式存储这样的视图?
我认为的形式:
Сustomer1 Сustomer2 Sum
Boby Alan 17
Boby Tom 37
Alan Tom 8
如果问题不清楚并需要任何解释,请在评论中告诉我。
答案 0 :(得分:1)
一种方式:
创建所有可能的组合:
from itertools import combinations
df1 = pd.DataFrame((combinations(df.Customer, 2)),
columns=['Customer1', 'Customer2'])
计算总和(方法 1):
df1['sum'] = df1.apply(lambda x: x.map(df.set_index('Customer').apply(np.array, 1))).apply(
lambda x: np.sum(np.square(x['Customer1'] - x['Customer2'])), 1)
方法二:
map_dict = df.set_index('Customer').apply(np.array, 1).to_dict()
a = df1.applymap(lambda x: map_dict[x]).values
df1['sum'] = np.sum(np.vstack(np.square(a[:, 0] - a[:, 1])), 1)
输出:
Customer1 Customer2 sum
0 Boby Alan 17
1 Boby Tom 37
2 Alan Tom 8