2016-10-03 112 views
1

因此,我试图理解熊猫groupby函数,并减少我拥有的大型数据框架。下面是一个例子:Pandas Groupby平均返回但是!排除NaN

       A  B 
2016-09-23 19:36:08+00:00 NaN  34.0 
2016-09-23 19:36:11+00:00 NaN  33.0 
2016-09-23 19:36:12+00:00 24.1 NaN 
2016-09-23 19:36:14+00:00 NaN  34.0 
2016-09-23 19:36:17+00:00 NaN  34.0 
2016-09-23 19:36:20+00:00 NaN  34.0 
2016-09-23 19:36:22+00:00 24.2 NaN 
2016-09-23 19:36:23+00:00 NaN  34.0 
2016-09-23 19:36:26+00:00 NaN  34.0 
2016-09-23 19:36:29+00:00 NaN  34.0 
2016-09-23 19:36:32+00:00 24.1 NaN 
2016-09-23 19:36:33+00:00 NaN  34.0 
2016-09-23 19:37:00+00:00 NaN  34.0 
2016-09-23 19:37:02+00:00 24.1 NaN 

所以我有以不同的速率与它们的采样时间作为原始数据帧的索引2的采样数据序列“A”和“B”。

我想现在按日期/小时/分钟对数据框的行进行分组,并返回每分钟数据的平均值。这里的平均值应该忽略数据帧中的缺失值。

因此,例如,我会回到这样的事情:

       A  B 
2016-09-23 19:36:00+00:00 24  34.0 
2016-09-23 19:37:00+00:00 24.1 33.0 

是否有可能有一个内置的大熊猫功能做到这一点?

回答

2

我认为你需要resampleResampler.mean,其计算平均群体,排除遗漏值:

print (df.resample('1Min').mean()) 
          A   B 
2016-09-23 19:36:00 24.133333 33.888889 
2016-09-23 19:37:00 24.100000 34.000000 

另一种解决方案与groupby

print (df.groupby([pd.TimeGrouper('1Min')]).mean()) 
          A   B 
2016-09-23 19:36:00 24.133333 33.888889 
2016-09-23 19:37:00 24.100000 34.000000 
+0

感谢您的答复。这些都是很好看的解决方案。但对我来说,他们回来时发生错误:“ DataError:没有要聚合的数字类型”。这可能是因为我的数据框的索引有datetime对象吗? – MadProgrammer

+0

不,这意味着您的列不会转换为数字。试试'df.A = df.B.astype(float)'和'df.B = df.b.astype(float)'。如果它返回错误,还有另一种可能的解决方案,所以问题是如何工作'astype'铸造? – jezrael

+0

非常感谢,解决了! – MadProgrammer