我聚合我的熊貓數據框:data
。具體來說,我想通過[origin
和type
]的元組得到平均值和總和amount
。對於平均和總結我試過numpy的功能如下:熊貓聚集忽略NaN的
import numpy as np
import pandas as pd
result = data.groupby(groupbyvars).agg({'amount': [ pd.Series.sum, pd.Series.mean]}).reset_index()
我的問題是,amount
列包括NaN
s,這導致上述代碼的result
有很多的NaN
平均數額。
我知道pd.Series.sum
和pd.Series.mean
默認有skipna=True
,所以爲什麼我仍然在這裏得到NaN
?
我也試過這個,這顯然沒有奏效:
data.groupby(groupbyvars).agg({'amount': [ pd.Series.sum(skipna=True), pd.Series.mean(skipna=True)]}).reset_index()
編輯: 在@ Korem的建議下,我還試圖用一個partial
如下:
s_na_mean = partial(pd.Series.mean, skipna = True)
data.groupby(groupbyvars).agg({'amount': [ np.nansum, s_na_mean ]}).reset_index()
但得到這個錯誤:
error: 'functools.partial' object has no attribute '__name__'
你能發佈一些示例數據?另外,首先,而不是'pd.Series.sum' - 只使用'sum' - 代碼應該採用更快的路徑。 – chrisb 2014-10-01 16:26:46
謝謝,我決定使用'pd.Series.sum'因爲它有一個'skipna'選項。閱讀@ Korem的回答,我現在使用'np.nansum'。但'np.nanmean'在我的numpy版本(1.7.1)中不可用。我會嘗試發佈代表性數據,這可能需要一段時間。 – Rhubarb 2014-10-02 07:12:40