python-3.x - 在 groupby 中应用 pandas cut

标签 python-3.x pandas

我尝试在基于一列 (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]'

看起来它正在尝试做正确的事情,但我不确定它为什么要尝试将字符串更改为 float 。

最佳答案

这是一种魔法:

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

关于python-3.x - 在 groupby 中应用 pandas cut,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42265471/

相关文章:

mysql - 防止 Django 表单中的 SQL 注入(inject)

python - 如何有效地将字典的条目转换为数据框

pandas - 如何通过计算而不是迭代来矢量化组

python - 使用 Python 编辑 Parquet 文件会导致日期时间格式错误

python - 将数据帧重复合并到数据帧的单列中的优雅而有效的方法

python-3.x - cx_Freeze : ImportError: No module named 'PyQt5.Qt'

python - 如何获取二进制表示为 1 的数字?

python - 将 python 3 中的生成器与 +-operator 连接起来

python - 如何将 pandas 数据框的第 n 行提取为 pandas 数据框?

python - 在 Pandas 中合并数据后重命名列