【问题标题】:Repeat calculations for every row of dataframe对每一行数据框重复计算
【发布时间】: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() 在每一行上调用一个函数。

标签: python pandas dataframe


【解决方案1】:

由于您的最终结果似乎是一个标量,您可以将这两个数据帧都转换为 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])

也可以。

【讨论】:

    猜你喜欢
    • 2016-10-14
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 2019-04-18
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多