分组并找到组的总和但是将NaN作为NaN返回,而不是0

jov*_*cbg 6 python numpy nan dataframe pandas

我有一个数据框,每个唯一的组有4行.所以我需要按列进行分组,使它们成为唯一的,并进行一些聚合,例如max,min,sum和average.但问题是我为某些组提供了所有NaN值(在某些列中)并返回0.是否有可能返回NaN?例如:df

       time            id     el    conn   column1  column2  column3
2018-02-11 14:00:00     1     a      12      8        5         NaN
2018-02-11 14:00:00     1     a      12      1        NaN       NaN
2018-02-11 14:00:00     1     a      12      3        7         NaN
2018-02-11 14:00:00     1     a      12      4        12        NaN
2018-02-11 14:00:00     2     a      5       NaN      5         5
2018-02-11 14:00:00     2     a      5       NaN      3         2
2018-02-11 14:00:00     2     a      5       NaN      NaN       6
2018-02-11 14:00:00     2     a      5       NaN      7         NaN
Run Code Online (Sandbox Code Playgroud)

因此,例如,我需要groupby('id','el','conn')并找到column1,column3和column2的和.(在实际情况下,我需要执行更多的列聚合).我尝试了几种方法:.sum(),. transnsform('sum'),但是对于具有所有NaN值的组,我返回零.

期望的输出:

    time               id    el     conn   column1  column2  column3
2018-02-11 14:00:00     1     a      12      16       24       NaN
2018-02-11 14:00:00     2     a      5       NaN      15        13
Run Code Online (Sandbox Code Playgroud)

欢迎任何帮助.

jez*_*ael 5

将参数更改min_count1-可以在最新的熊猫版本中使用0.22.0

min_count:int,默认0

执行操作所需的有效值数量。如果存在少于min_count个非NA值,则结果将为NA。

0.22.0版中的新增功能:添加了默认值1。这表示全NA或空序列的总和或乘积为NaN。

df = df.groupby(['time','id', 'el', 'conn'], as_index=False).sum(min_count=1)
print (df)
                  time  id el  conn  column1  column2  column3
0  2018-02-11 14:00:00   1  a    12     16.0     24.0      NaN
1  2018-02-11 14:00:00   2  a     5      NaN     15.0     13.0
Run Code Online (Sandbox Code Playgroud)