2017-02-16 4 views
2

私は、1つの列(A)に基づいてDataFrame内にビン(A_bin)を作成し、元の各列内の別の列(B)に基づいて一意のビン(B_bin)ビン。グループ内でパンダを適用する

df = pd.DataFrame({'A': [4.5, 5.1, 5.9, 6.3, 6.7, 7.5, 7.9, 8.5, 8.9, 9.3, 9.9, 10.3, 10.9, 11.1, 11.3, 11.9], 
         'B': [3.2, 2.7, 2.2, 3.3, 2.1, 1.8, 1.4, 1.0, 1.8,2.4, 1.2, 0.8, 1.4, 0.6, 0, -0.4]}) 
df['A_bin'] = pd.cut(df['A'], bins=3) 
df['B_bin'] = df.groupby('A_bin')['B'].transform(lambda x: pd.cut(x, bins=2)) 

これは、その結果:

--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-341-5742137b7574> in <module>() 
     2       'B': [3.2, 2.7, 2.2, 3.3, 2.1, 1.8, 1.4, 1.0, 1.8,2.4, 1.2, 0.8, 1.4, 0.6, 0, -0.4]}) 
     3 df['A_bin'] = pd.cut(df['A'], bins=3) 
----> 4 df['B_bin'] = df.groupby('A_bin')['B'].transform(lambda x: pd.cut(x, bins=2)) 

C:\Users\ddecker1\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\groupby.py in transform(self, func, *args, **kwargs) 
    2761 
    2762    indexer = self._get_index(name) 
-> 2763    result[indexer] = res 
    2764 
    2765   result = _possibly_downcast_to_dtype(result, dtype) 

ValueError: could not convert string to float: '(2.0988, 2.7]' 

正しいことを行うためにしようとしているように見えますが、フロートする文字列を変更しようとしている私はなぜわかりません。

答えて

1

それは魔法のようなものだ:

df.groupby('A_bin')[['B']].transform(lambda x: pd.cut(x, bins=2)) 
+0

ありがとう!これは機能します。 – Dave

関連する問題