前提・実現したいこと
表題の通りです。時系列データに対して、数秒ごとのヒストグラムを求めようとしているのですが、rolling.applyの戻り値がlistやarray型ではエラーが出るため、うまくできていません。別の方法でも良いので、上記の目的を達成する方法がないでしょうか?
python
1import numpy as np 2import pandas as pd 3 4df = pd.DataFrame({"col": np.arange(100)}) 5 6def calc_hist_range2(x): 7 last_x = x[-1] 8 # 最後の値から-10~+10までの範囲のヒストグラムを作成してreturn 9 range_ = (last_x - 10, last_x + 10) 10 return np.histogram(x, bins=7, range=range_)[0] 11 12df["col"].rolling(3).apply(calc_hist_range2, raw=True)
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-212-acc56cfb208f> in <module> ----> 1 df["col"].rolling(3).apply(calc_hist_range2, raw=True) ~/conda/lib/python3.8/site-packages/pandas/core/window/rolling.py in apply(self, func, raw, engine, engine_kwargs, args, kwargs) 2057 self, func, raw=False, engine=None, engine_kwargs=None, args=None, kwargs=None, 2058 ): -> 2059 return super().apply( 2060 func, 2061 raw=raw, ~/conda/lib/python3.8/site-packages/pandas/core/window/rolling.py in apply(self, func, raw, engine, engine_kwargs, args, kwargs) 1386 1387 # name=func & raw=raw for WindowGroupByMixin._apply -> 1388 return self._apply( 1389 apply_func, 1390 center=center, ~/conda/lib/python3.8/site-packages/pandas/core/window/rolling.py in _apply(self, func, center, require_min_periods, floor, is_weighted, name, use_numba_cache, **kwargs) 586 result = np.apply_along_axis(calc, self.axis, values) 587 else: --> 588 result = calc(values) 589 result = np.asarray(result) 590 ~/conda/lib/python3.8/site-packages/pandas/core/window/rolling.py in calc(x) 574 closed=self.closed, 575 ) --> 576 return func(x, start, end, min_periods) 577 578 else: ~/conda/lib/python3.8/site-packages/pandas/core/window/rolling.py in apply_func(values, begin, end, min_periods, raw) 1413 if not raw: 1414 values = Series(values, index=self.obj.index) -> 1415 return window_func(values, begin, end, min_periods) 1416 1417 return apply_func pandas/_libs/window/aggregations.pyx in pandas._libs.window.aggregations.roll_generic_fixed() TypeError: only size-1 arrays can be converted to Python scalars
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/03 09:16 編集
2021/02/03 09:39
2021/02/04 11:38
2021/02/05 03:23
2021/02/06 00:06
2021/02/06 13:27