【发布时间】:2023-03-16 14:15:01
【问题描述】:
我有以下数据框:
df
A B
0 2.5 0.1
1 NaN 0.5
2 NaN 0.3
3 2.0 0.1
我想将 A 中的每个非值与 B 列相乘。 这可以使用
来实现dyadic = np.multiply(df['A'].values.reshape((1,4)).T, df['B'].values.reshape((1,4)))
dyadic
并返回向量的二元乘积
array([[ 0.25, 1.25, 0.75, 0.25],
[ nan, nan, nan, nan],
[ nan, nan, nan, nan],
[ 0.2 , 1. , 0.6 , 0.2 ]])
是否可以直接从 pandas 构建这样的 DataFrame?
这个问题的背景:在groupby之后,每个组都由一个具有上述结构的DataFrame组成。 A 中总是至少有一个非 nan 条目,但可能有多个。我想构建一个新列作为 (non-nan(A) * (B)) 的向量的平均值(如果需要,考虑到 A 值的不安全性,这是一种插补) 这可以简单地实现
np.nanmean(dyadic, axis=0)
array([ 0.225, 1.125, 0.675, 0.225])
或者 numpy 只是这里最优雅的解决方案?
【问题讨论】:
-
不是 Pandas 的答案,但
np.outer(cf docs.scipy.org/doc/numpy-1.10.4/reference/generated/…) 不会比您的np.multiply方法更简单并获得相同的结果吗? -
是的,点确实更容易。不知道为什么我没有使用它。谢谢提示
标签: python pandas numpy matrix-multiplication