具有 nan 值的 sumproduct 2 数据帧

sumproduct 2 dataframes with nan values

有 2 个数据帧 df['x'] 和 df['y']。 我如何将 2 个表相乘并对行求和?

x0  x1  x2      y0  y1  y2
2   5   9       2   3   4
Nan 4   7       2   2   3
3   Nan 3       1   2   3

期望的输出:
(2x2)+(5x3)+(9x4) = 55
等..

Nan 应视为 0。
我一直在用下面的代码用 nan 值打结果。
还有其他更有效的方法来解决这个问题吗?

df['z'] = (df['x'].to_numpy() * df['y'].to_numpy()).sum(axis=1)

尝试将 filterregex 参数一起使用:

df.filter(regex='x\d').mul(df.filter(regex='y\d').to_numpy()).sum(axis=1)

或仅使用 filter(like=...):

df.filter(like='x').mul(df.filter(like='y').to_numpy()).sum(axis=1)

0    55.0
1    29.0
2    12.0
dtype: float64

Pandas 支持 arithmetic operations over dataframe,并为它们提供灵活的包装器。

 df.method()   operator
------------------------
     add          +
     sub          -
     mul          *
     div          /
     mod          %
     pow          **

简单地将原始数据框与填充的 nan 值相乘。

#METHOD 1
(df_x.fillna(0)*df_y.values).sum(1)

或者您可以使用 pd.DataFrame.mul(),它等同于 *,但提供了添加 fill_value

的功能
#METHOD 2
df_x.mul(df_y.values, fill_value=0).sum(1)
0    55.0
1    29.0
2    12.0
dtype: float64

Note: If df_y as nan values as well, then replace df_y.values with df_y.fillna(0).values.