0
我試圖寫一個函數,它執行以下操作減去一個大熊貓數據幀列的值:類型錯誤:不支持的操作類型時,試圖從另一個
- 發現了大熊貓列的平均值。
- 將此值放入新列。
- 查找月份平均值(即所有四元合併的平均值)
- 從年平均值中減去月份平均值,並將此值放入新列(月份效果)中。
- 將「月效應」列中的值添加到包含建模預測的現有列中。
DataFrame
索引爲datetime
。下面的代碼拋出一個TypeError:unsupported operand type(s) for -: 'instancemethod' and 'float'
,但我不知道爲什麼。跟蹤在代碼下面。有人可以提出解決辦法嗎?
def get_RIM2(df,obs, rim):
"""df, observation, modelled value"""
a= obs.mean #mean of whole dataset
b= obs.median #median of whole dataset
df.insert(len(df.columns), 'Mean', a)
df.insert(len(df.columns), 'Median', b)
g = obs.groupby(pd.TimeGrouper('M'))
h = obs.groupby(pd.TimeGrouper('M'))
g.transform('mean') # mean for each month
h.transform('median') # median for each month
df['Mmean'] = df['Mean'] - g.transform('mean') # month effect
df['Mmedian'] = df['Median'] - h.transform('median') # month effect
df['RIMs2a'] = rim + df['Mmean']
df['RIMs2b'] = rim + df['Mmedian']
return df
get_RIM2(sve_DOC, sve_DOC['DOC_mg/L'], sve_DOC['RIMsDOC'])
錯誤:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-69-249d56b28c7a> in <module>()
14 return df
15
---> 16 get_RIM2(sve_DOC, sve_DOC['DOC_mg/L'], sve_DOC['RIMsDOC'])
17 get_RIM2(svv_DOC, svv_DOC['DOC_mg/L'], svv_DOC['RIMsDOC'])
18 get_RIM2(svw_DOC, svw_DOC['DOC_mg/L'], svw_DOC['RIMsDOC'])
<ipython-input-69-249d56b28c7a> in get_RIM2(df, obs, rim)
8 g.transform('mean') # mean for each month
9 h.transform('median') # median for each month
---> 10 df['Mmean'] = df['Mean'] - g.transform('mean')
11 df['Mmedian'] = df['Median'] - h.transform('median')
12 df['RIMs2a'] = rim + df['Mmean']
C:\Users\AppData\Local\Enthought\Canopy32\User\lib\site-packages\pandas\core\ops.pyc in wrapper(left, right, name)
495 rvalues = com.take_1d(rvalues, ridx)
496
--> 497 arr = na_op(lvalues, rvalues)
498
499 return left._constructor(wrap_results(arr), index=index,
C:\Users\AppData\Local\Enthought\Canopy32\User\lib\site-packages\pandas\core\ops.pyc in na_op(x, y)
449 result = np.empty(x.size, dtype=dtype)
450 mask = notnull(x) & notnull(y)
--> 451 result[mask] = op(x[mask], y[mask])
452 else:
453 result = pa.empty(len(x), dtype=x.dtype)
TypeError: unsupported operand type(s) for -: 'instancemethod' and 'float'