2017-02-26 19 views
1

カラムの中央値を計算しようとしています。私はこの質問と答えは私が必要な正確な答えであるパンダグループの中央値を計算する

Pandas: Calculate Median of Group over Columns

で非常に明確な例を見つけました。私は自分の

import pandas 
import numpy 

data_3 = [2,3,4,5,4,2] 
data_4 = [0,1,2,3,4,2] 

df = pandas.DataFrame({'COL1': ['A','A','A','A','B','B'], 
         'COL2': ['AA','AA','BB','BB','BB','BB'], 
         'COL3': data_3, 
         'COL4': data_4}) 

m = df.groupby(['COL1', 'COL2'])[['COL3','COL4']].apply(numpy.median) 

の詳細を介して動作するために掲示正確な例を作成し、私は列の上に、グループの中央値を計算しようとしたとき、私はまったく同じコードを実行すると、私はエラー

TypeError: Series.name must be a hashable type 

に遭遇します中央値を異なる統計値(平均値、最小値、最大値、標準偏差)で置き換えた唯一の違いがあり、すべて正常に機能します。

私はこのエラーの原因と、実際に計算する必要がある中央値のみが発生する理由を理解していません。ここにあなたの助けを事前に

おかげで、

ボブ

は、完全なエラーメッセージです。私はおそらくタプルであるにもかかわらず、どういうわけか、この段階でのシリーズ名は非ハッシュ可能として解釈されている

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-12-af0ef7da3347> in <module>() 
----> 1 m = df.groupby(['COL1', 'COL2'])[['COL3','COL4']].apply(numpy.median) 

/Applications/anaconda3/lib/python3.5/site-packages/pandas/core/groupby.py in apply(self, func, *args, **kwargs) 
    649   # ignore SettingWithCopy here in case the user mutates 
    650   with option_context('mode.chained_assignment', None): 
--> 651    return self._python_apply_general(f) 
    652 
    653  def _python_apply_general(self, f): 

/Applications/anaconda3/lib/python3.5/site-packages/pandas/core/groupby.py in _python_apply_general(self, f) 
    658    keys, 
    659    values, 
--> 660    not_indexed_same=mutated or self.mutated) 
    661 
    662  def _iterate_slices(self): 

/Applications/anaconda3/lib/python3.5/site-packages/pandas/core/groupby.py in _wrap_applied_output(self, keys, values, not_indexed_same) 
    3373     coerce = True if any([isinstance(x, Timestamp) 
    3374          for x in values]) else False 
-> 3375     return (Series(values, index=key_index, name=self.name) 
    3376       ._convert(datetime=True, 
    3377         coerce=coerce)) 

    /Applications/anaconda3/lib/python3.5/site-packages/pandas/core/series.py in __init__(self, data, index, dtype, name, copy, fastpath) 
     231   generic.NDFrame.__init__(self, data, fastpath=True) 
     232 
    --> 233   self.name = name 
     234   self._set_axis(0, index, fastpath=True) 
     235 

    /Applications/anaconda3/lib/python3.5/site-packages/pandas/core/generic.py in __setattr__(self, name, value) 

    2692    object.__setattr__(self, name, value) 
    2693   elif name in self._metadata: 
-> 2694    object.__setattr__(self, name, value) 
    2695   else: 
    2696    try: 

/Applications/anaconda3/lib/python3.5/site-packages/pandas/core/series.py in name(self, value) 
    307  def name(self, value): 
    308   if value is not None and not com.is_hashable(value): 
--> 309    raise TypeError('Series.name must be a hashable type') 
    310   object.__setattr__(self, '_name', value) 
    311 

TypeError: Series.name must be a hashable type 
+0

あなたは偶数の値を持っていますか? – CodeCupboard

答えて

0

のpython 3.5.2を使用しています。私は1つが固定され、閉じたとして、それは同じバグかもしれないと思う:

基本的には、グループ内の単一のスカラー値は、(あなたはあなたの例では持っているように)の名前を引き起こしていましたシリーズは通過しないでください。 0.19.2に固定されています。いずれの場合においても


あなたが(とすべきである)GROUPBYにmeanmedianなどを呼び出すことができますので、それは実用的な懸念すべきではないオブジェクトを直接。

>>> df.groupby(['COL1', 'COL2'])[['COL3', 'COL4']].median() 
      COL3 COL4 
COL1 COL2    
A AA  2.5 0.5 
    BB  4.5 2.5 
B BB  3.0 3.0 
+1

ありがとうございます。あなたのご意見は非常に役に立ち、私の問題を解決しました。 –

関連する問題