同时输出pandas binning中的bins和labels列

问题描述 投票:0回答:1

例如,我有一个要在其中执行合并的数据框列:

df.head
X
4.6
2.5
3.1
1.7

我希望将一列用于bin范围,将一列用作标签,如下所示:

df.head
X bin label
4.6 (4,5] 5
2.5 (2,3] 3
3.1 (3,4] 4
1.7 (1,2] 2

显然,按如下所示设置label参数只会在bin标签上产生一列,但在范围内不再显示。

df['bin'] = df.X.apply(pd.cut, labels=np.arange(5))

是否有更优雅的解决方案,而不是对两列都运行两次pd.cut

谢谢

python pandas dataframe binning
1个回答
1
投票

如果允许pd.cut动态设置bin边缘,则可以使用retbins标志。从pd.cut documentation

pd.cut

这将返回第二个结果:

retbins: bool, default False
    Whether to return the bins or not. Useful when bins is provided as a scalar.

您可以使用它来将垃圾箱边缘分配给框架:

bins: numpy.ndarray or IntervalIndex.
    The computed or specified bins. Only returned when
    retbins=True. For scalar or sequence bins, this is
    an ndarray with the computed bins. If set
    duplicates=drop, bins will drop non-unique bin. For
    an IntervalIndex bins, this is equal to bins.

您的评论表示您希望在groupby操作中使用此功能。在这种情况下,您可以将以上内容包装在一个函数中:

assignments, edges = pd.cut(df.X, bins=5, labels=False, retbins=True)
df['label'] = assignments
df['bin_floor'] = edges[assignments]
df['bin_ceil'] = edges[assignments + 1]
© www.soinside.com 2019 - 2024. All rights reserved.