具有 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)
尝试将 filter
与 regex
参数一起使用:
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
.
有 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)
尝试将 filter
与 regex
参数一起使用:
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 replacedf_y.values
withdf_y.fillna(0).values
.