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

时间:2018-03-12 11:22:27

标签: python pandas numpy dataframe nan

我有一个数据框,每个唯一的组有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      16       24       NaN
2018-02-11 14:00:00     2     a      5       NaN      15        13

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

期望的输出:

void createIndexFile(char fname[])
{
    int i=0;
    char tempFile[40];
    char indexFile[40];
    printf("\n%s",fname);
    strcpy(indexFile,"");
    while(fname[i]!='.')
    {
        if(fname[i]=='/')
         tempFile[i]='_';
        else
         tempFile[i]=fname[i];
      i++;
    }
     tempFile[i]='\0';
    strcat(tempFile,".idx");
    strcat(indexFile,tempFile);
    printf("\nIndex File Name: %s",indexFile);
}

欢迎任何帮助。

2 个答案:

答案 0 :(得分:4)

将参数min_count更改为1 - 这在last pandas version 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

答案 1 :(得分:0)

我认为它应该是这样的。

df.groupby(['time','id','el','conn']).sum() 

Python 2中的输出:

enter image description here

对于groupby的一些小教程我觉得这些情况很有趣:

  1. https://chrisalbon.com/python/data_wrangling/pandas_apply_operations_to_groups/
  2. https://www.tutorialspoint.com/python_pandas/python_pandas_groupby.htm