2016-10-03 161 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