python-3.x - 如何比较一个数据框的所有行
问题描述
我有一个这样的数据框:
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
如果问题不清楚并需要任何解释,请在评论中告诉我。
解决方案
单程:
创建所有可能的组合:
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
推荐阅读
- gazebo-simu - MatLab 和 Gazebo 之间的联合仿真
- python - 根据其他行从熊猫数据框中删除行
- python - 具有确定时间间隔的熊猫 to_datetime
- django - 如何在 Django 模型的一对多相关字段上执行条件聚合?
- c++ - c ++对象成员函数按字母顺序对列表进行排序
- javascript - PuppeteerSharp 正在更改从 textContent 获取的日期格式
- php - Laravel Config Auth 在警卫上缺少 api
- css - 如何在表格的边框上放置通知警报?
- python - Python将度分秒转换为十进制
- oracle - ORACLE APEX - 下载到 .CSV(空值显示为 - 缺失)问题