【发布时间】:2022-11-10 22:16:32
【问题描述】:
以下计算是针对第一行的,即train_df.y1[0]。
我想对train_df 的所有 400 行重复此操作
squared_deviations_y1_0_train = ((ideal_df.loc[:0,"y1":"y50"] - train_df.y1[0]) ** 2).sum(axis=1)
结果是正确的,只需要重复一遍。
【问题讨论】:
-
使用
.apply()在每一行上调用一个函数。
以下计算是针对第一行的,即train_df.y1[0]。
我想对train_df 的所有 400 行重复此操作
squared_deviations_y1_0_train = ((ideal_df.loc[:0,"y1":"y50"] - train_df.y1[0]) ** 2).sum(axis=1)
结果是正确的,只需要重复一遍。
【问题讨论】:
.apply() 在每一行上调用一个函数。
由于您的最终结果似乎是一个标量,您可以将这两个数据帧都转换为 Numpy 并利用广播。
像这样的东西,
squared_deviations_y1_0_train = ((ideal_df.to_numpy() - train_df.y1.to_numpy().reshape(-1,1)) ** 2).sum(axis=1)
会做得很好。如果您必须留在 pandas 中,您可以使用 subtract() 方法来获得相同的结果。
(train_df.y1.subtract(ideal_df.T) ** 2).sum(axis=0)
并不是说 train_df.y1 成为大小为 (400,) 的行向量,因此您需要将行维度设为 400 来进行减法(因此是 Ideal_df 的转置)。
您还可以按照 Barmar 的建议使用 apply() 方法。这将要求您定义一个计算行索引的函数,以便您可以在执行平方和求和运算之前为每个单元格减去适当的 train_df 值。像这样的东西,
ideal_df.apply(lambda cell: cell - train_df.y1[cell.index])
也可以。
【讨论】: