什么时候有NaN,你想使用groupby

时间:2017-06-13 11:25:34

标签: python pandas numpy

好的,我有一个带有Timestamp索引的数据框,我希望将其分组。它的形式如下:

                         key1           key2       value
 2014-02-03 12:00:00     22             32         98.89
 2014-02-03 12:00:00     23             33         99.25
 2014-02-03 12:00:00     24             34         99.78
 2014-02-03 15:00:00     22             32         96.54
 2014-02-03 15:00:00     23             33         97.21
 2014-02-03 15:00:00     24             34         98.59
 2014-02-03 18:00:00     22             33         97.41

所以你可以看到,每3个索引都有3个小时的跳跃。我想使用均值作为函数进行索引分组。我用:

grouped = df.groupby(level=0).mean()

问题是我想确定如果有NaN(例如,如果2014-02-03 18:00:00只有2个条目而第三个是NaN)我想要的意思是要计算。我想使用numpy的nanmean函数:

grouped = df.groupby(level=0).nanmean()

但是nanmean不是groupby的属性,它不起作用。你有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:1)

我认为你会得到相同的输出,因为GroupBy.mean省略NaN s - 与np.nanmean相同:

print (df)
                     key1  key2   value
2014-02-03 12:00:00  22.0  32.0   98.89
2014-02-03 12:00:00  23.0  33.0   99.25
2014-02-03 12:00:00  24.0  34.0   99.78
2014-02-03 15:00:00  22.0  32.0   96.54
2014-02-03 15:00:00  23.0  33.0   97.21
2014-02-03 15:00:00  24.0  34.0   98.59
2014-02-03 18:00:00  22.0  33.0   97.41
2014-02-03 18:00:00  25.0  40.0  100.00
2014-02-03 18:00:00   NaN   NaN     NaN


grouped = df.groupby(level=0).mean()
print (grouped)
                     key1  key2      value
2014-02-03 12:00:00  23.0  33.0  99.306667
2014-02-03 15:00:00  23.0  33.0  97.446667
2014-02-03 18:00:00  23.5  36.5  98.705000

grouped = df.groupby(level=0).agg(np.nanmean)
print (grouped)
                     key1  key2      value
2014-02-03 12:00:00  23.0  33.0  99.306667
2014-02-03 15:00:00  23.0  33.0  97.446667
2014-02-03 18:00:00  23.5  36.5  98.705000