Python 在对FOR循环内的行执行求和操作时排除NaN值
我有两个数据帧,如下所示Python 在对FOR循环内的行执行求和操作时排除NaN值,python,Python,我有两个数据帧,如下所示 df1= 2492 3853 2486 3712 2288 0 4 NaN 3.5 NaN NaN 1 3 NaN 2.0 4.5 3.5 2 3 3.5 4.5 NaN 3.5 3 3. NaN 3.5 4.5 NaN df2= 2492 0.476683 3853 0.464110 2486 0.438992 3712 0.400275 2288 0
df1=
2492 3853 2486 3712 2288
0 4 NaN 3.5 NaN NaN
1 3 NaN 2.0 4.5 3.5
2 3 3.5 4.5 NaN 3.5
3 3. NaN 3.5 4.5 NaN
df2=
2492 0.476683
3853 0.464110
2486 0.438992
3712 0.400275
2288 0.379856
现在我想通过排除NaN值得到df2值的总和
预期产量
0 0.915675[0.476683+0.438992]
1 1.695806[0.476683+0.438992+0.400275+0.379856]
2 1.759641[0.476683+0.464110+0.438992+0.379856]
3 1.31595 [0.476683+0.438992+0.400275]
请告诉我您对如何实现此问题的想法(不将NaN值替换为“0”)
应该足够了,跳过NaNs
第一个sum
是一个数据帧方法,它返回一个包含每行总和的序列,然后第二个是对该序列上的值求和
默认情况下,会忽略NAN
编辑:只需使用df2.sum()
就足够了您可以:
>>> ((df1.fillna(0)>0)*1).mul(df2.iloc[:,1].values).sum(axis=1)
0 0.915675
1 1.695806
2 1.759641
3 1.315950
dtype: float64
请注意,
NaN
未被“引用”替换,在执行此操作后,您的原始df1
中仍有NaN
。以下答案之一是否解决了您的问题?
>>> ((df1.fillna(0)>0)*1).mul(df2.iloc[:,1].values).sum(axis=1)
0 0.915675
1 1.695806
2 1.759641
3 1.315950
dtype: float64