首页 > 解决方案 > 如果某些值是 NaN,我如何对 DataFrame 中的 2 个特定列行求和?

问题描述

我想创建一个新列,Inches_z. Inches_x如果和中都有值Inches_y,我想对这两个特定列中的值求和,并将其作为Inches_z同一行的结果返回。如果NaN存在一个值,我想返回不是该值的行NaN值。如果两个值都是NaN,我希望结果值也是NaN。我该怎么做呢?

我有:

Name    | Inches_x | Feet | Inches_y
------------------------------------
'Silvers'|    7    |   1   |     2
'Jones'  |    7    |   2   |     7
'Jackson'|    4    |  NaN  |    NaN
'Merole' |   NaN   |   2   |     8
'Kanoff' |   NaN   |   5   |    NaN
'Walker' |   NaN   |   8   |     0
'Smith'  |    8    |   0   |     3  

我想:

Name    | Inches_x | Feet | Inches_y | Inches_z
-----------------------------------------------
'Silvers'|    7    |   1   |     2   |    9
'Jones'  |    7    |   2   |     7   |    14
'Jackson'|    4    |  NaN  |    NaN  |    4
'Merole' |   NaN   |   2   |     8   |    8
'Kanoff' |   NaN   |   5   |    NaN  |   NaN
'Walker' |   NaN   |   8   |     0   |    0
'Smith'  |    8    |   0   |     3   |    11

标签: pythonpandasdataframe

解决方案


Sum 和 fillna 与两列

df['z'] = (df['Inches_x'] + df['Inches_y']).fillna(df['Inches_x']).fillna(df['Inches_y'])`
        Name  Inches_x  Feet  Inches_y     z
0  'Silvers'       7.0   1.0       2.0   9.0
1    'Jones'       7.0   2.0       7.0  14.0
2  'Jackson'       4.0   NaN       NaN   4.0
3   'Merole'       NaN   2.0       8.0   8.0
4   'Kanoff'       NaN   5.0       NaN   NaN
5   'Walker'       1.0   8.0       0.0   1.0
6    'Smith'       8.0   0.0       3.0  11.0

推荐阅读