2016-08-05 44 views
1

Vor Pandas 0.18.0 habe ich der Lage sein, meine tief geschwenkt Tisch zu tun resamplen etwa so:Wie benutze ich ein Dict für das Resampling eines Multindex-Pandas-Datenrahmens? (> 0.18.0)

pivot_df = SoilSensorDf.pivot(status_df, ['A', 'B', 'C']) 
resample_methods = map({'A': 'sum', 
         'B': 'mean', 
         'C': 'min'}.get, 
        [x[0] for x in pivot_df.columns]) 
resample_method_tuple_list = zip(pivot_df.columns, resample_methods) 
resample_dict = dict(resample_method_tuple_list) 
pivot_df.resample('D', how=resample_dict) 

Aber mit Pandas 0.18.1, schlagen die docs ich es auf diese Weise

pivot_df.resample('D').agg(resample_dict) 

Aber das gibt mir den folgenden Fehler, den ich nicht herausfinden kann, wie zu lösen ist. Hat jemand Ideen?

File "/.../lib/python2.7/site-packages/pandas/tseries/resample.py", line 293, in aggregate 
result, how = self._aggregate(arg, *args, **kwargs) 


File "/.../lib/python2.7/site-packages/pandas/core/base.py", line 545, in _aggregate 
    result = _agg(arg, _agg_1dim) 
    File "/.../lib/python2.7/site-packages/pandas/core/base.py", line 496, in _agg 
    result[fname] = func(fname, agg_how) 
    File "/.../lib/python2.7/site-packages/pandas/core/base.py", line 475, in _agg_1dim 
    colg = self._gotitem(name, ndim=1, subset=subset) 
    File "/.../lib/python2.7/site-packages/pandas/tseries/resample.py", line 352, in _gotitem 
    return grouped[key] 
    File "/.../lib/python2.7/site-packages/pandas/core/base.py", line 330, in __getitem__ 
    if len(self.obj.columns.intersection(key)) != len(key): 
    File "/.../lib/python2.7/site-packages/pandas/indexes/multi.py", line 2031, in intersection 
    other, result_names = self._convert_can_do_setop(other) 
    File "/.../lib/python2.7/site-packages/pandas/indexes/multi.py", line 2095, in _convert_can_do_setop 
    raise TypeError(msg) 
TypeError: other must be a MultiIndex or a list of tuples 

Beispiel zu demonstrieren:

df = pd.DataFrame(np.random.randint(0, 100, (10, 3)), columns=list('ABC'), 
        index=pd.date_range('2016-01-01', freq='1400T', periods=10)) 
df['D'] = ['x', 'x', 'x', 'x', 'x', 'y', 'y', 'y', 'y', 'y'] 
df.index.name = "timestamp" 
df_pivot = pd.pivot_table(df.reset_index(), values=['A', 'B'], index="timestamp", 
          columns=['C', 'D']) 
resample_methods = map({'A': 'sum', 'B': 'mean'}.get, [x[0] for x in df_pivot.columns]) 
resample_method_tuple_list = zip(df_pivot.columns, resample_methods) 
resample_dict = dict(resample_method_tuple_list) 
df_pivot.resample('D').agg(resample_dict) 

Antwort