这是我的数据框df:
str1 str2 str3 str4
key1 3 4 2 5
key2 NaN 3 4 4
key3 NaN NaN NaN 2
和向量w:
[0.2, 0.3, 0.5]
我通常使用df.T.dot(w)
来计算数据帧与向量之间的乘积。但是我想知道如何通过对向量进行重新加权并在没有完整的NaN列的情况下进行计算来避免NaN值。
我的案例示例:
对于第一列,我希望向量等于v = [0.2+0.3+0.5, 0, 0]
,并计算[3, NaN, NaN]
乘以[1, 0, 0]
。
对于第二列,我想要v = [0.2+0.25, 0.3+0.25, 0]
。
对于第三列,我想要v = [0.2+0.25, 0.3+0.25, 0]
。
对于第四列,我希望v
保持不变,因为没有NaN。
预期输出:
str1 str2 str3 str4
0 3 3.45 3.1 4.7
答案 0 :(得分:1)
如果NaN值在内部乘积中表示“权重= 0”,则在执行计算之前,请像这样修改数据框:
df_without_nans = df.fillna(value=0.0) # 'value' can be dropped
dot_product = df_without_nans.T.dot(w)
答案 1 :(得分:0)
我不确定是否有一种简单的方法来处理nan
值。您可能必须创建自己的点积函数来处理这些值。这样的事情可能会起作用:
df.apply(lambda x: (x * [1, 0, 0]).sum())
pandas sum
方法会自动忽略nan
的值,因此您不必自己明确地找到这些值。您可能会参考其他权重数组来替换[1, 0, 0]
。我不确定您现在如何安排将其整合到上述建议中。