2017-08-02 2 views
1

複数の関数を適用して複数の列(軸= 1)にデータフレームを集約する最適な方法は何ですか?関数のリストを適用する複数の関数を軸= 1で集約

は、デフォルトの軸= 0で期待どおりに動作:

In [7]: tsdf = pd.DataFrame(np.random.randn(2, 3), columns=['A', 'B', 'C'], 
          index=pd.date_range('1/1/2000', periods=2)) 
    ...: tsdf 

Out[7]: 
        A   B   C 
2000-01-01 -0.496619 0.282351 0.222707 
2000-01-02 1.185002 -0.988669 -2.300515 

In [8]: tsdf.agg(['min', 'max', 'mean']) 
Out[8]: 
      A   B   C 
min -0.496619 -0.988669 -2.300515 
max 1.185002 0.282351 0.222707 
mean 0.344191 -0.353159 -1.038904 

しかし、軸= 1使用しているときに失敗します。

In [9]: tsdf.agg(['min', 'max', 'mean'], axis=1) 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-9-ad4197b17943> in <module>() 
----> 1 tsdf.agg(['min', 'max', 'mean'], axis=1) 

c:\python34\lib\site-packages\pandas\core\frame.py in aggregate(self, func, axis, *args, **kwargs) 
    4152     pass 
    4153   if result is None: 
-> 4154    return self.apply(func, axis=axis, args=args, **kwargs) 
    4155   return result 
    4156 

c:\python34\lib\site-packages\pandas\core\frame.py in apply(self, func, axis, broadcast, raw, reduce, args, **kwds) 
    4260       f, axis, 
    4261       reduce=reduce, 
-> 4262       ignore_failures=ignore_failures) 
    4263    else: 
    4264     return self._apply_broadcast(f, axis) 

c:\python34\lib\site-packages\pandas\core\frame.py in _apply_standard(self, func, axis, ignore_failures, reduce) 
    4356    try: 
    4357     for i, v in enumerate(series_gen): 
-> 4358      results[i] = func(v) 
    4359      keys.append(v.name) 
    4360    except Exception as e: 

TypeError: ("'list' object is not callable", 'occurred at index 2000-01-01 00:00:00') 

は私が行方不明です何がありますか?私は軸が多かれ少なかれ対称的に扱われたと思っていました。 axis = 1で複数の集計関数を適用する最良の方法は何ですか?

おかげで、 アレックス

+0

私は思いますこれはこのリンクに記載されているバグです:https://github.com/pandas-dev/pandas/issues/16679 –

答えて

2

私はこれがPandas-Dev GitHubに記載されているバグだと思う:

しかし、回避策があります:

tsdf.T.agg(['min','max','mean']).T 

は出力:

    min  max  mean 
2000-01-01 0.187605 1.707985 0.874033 
2000-01-02 -1.156725 1.121996 -0.009986 
+1

ありがとう、スコット。そのバグが報告されていることを知っておくと良いです。私は昨日同じ回避策を思いついた。宜しくお願いします。 – user2690051