为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用自动生成的类别和箱从 Pandas cut() 命令创建个性化的桶列?

如何使用自动生成的类别和箱从 Pandas cut() 命令创建个性化的桶列?

噜噜哒 2022-06-02 10:20:01
我有一个包含多列的 Pandas DataFrame。其中之一是year. 在此列中,我想创建一个具有分类值的新列(我猜 therm 是存储桶),并自动生成存储桶。它应该导致类似的结果:year_gr         year    other_colsA (1909 - 1917) 1911    abcB (1921 - 1930) 1923    defC (1932 - 1941) 1935    ghi我设法通过以下方式创建接近它的东西:year_gr = pd.cut(df.year, 10, labels=[   'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'])df['year_gr'] = year_grdf.head()year_gr year    other_colsA       1911    abcB       1923    defC       1935    ghi但是如何将自动生成的愤怒连接pd.cut到我的year_gr变量?我看到我们可以retbins=True在cut命令中添加参数来提取垃圾箱,但我没有设法利用它......谢谢!
查看完整描述

1 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

pd.cut 产生一个由区间对象填充的类别对象。我们使用它们的 .left 和 .right 属性来创建指定的字符串。


    import numpy as np, pandas as pd

    import string


    # test data:

    df=pd.DataFrame({"year":[1911,1923,1935,1911],"other_cols":["abc","def","ghi","jkl"]})

  Out:

           year other_cols

    0  1911        abc

    1  1923        def

    2  1935        ghi

    3  1911        jkl


    #create the intervals:

    cats=pd.cut(df.year,10)


    Out: cats.dtypes.categories

    IntervalIndex([(1910.976, 1913.4], (1913.4, 1915.8], (1915.8, 1918.2],...


    # char generator:

    gchar=(ch for ch in string.ascii_uppercase)

    dlbls= { iv:next(gchar) for iv in cats.dtypes.categories } #EDIT1

    # get the intervals and convert them to the specified strings:

    df["year_gr"]=[ f"{dlbls[iv]} ({int(np.round(iv.left))} - {int(np.round(iv.right))})" for iv in cats ] #EDIT1

   Out:

          year other_cols          year_gr

    0  1911        abc  A (1911 - 1913)

    1  1923        def  B (1921 - 1923)

    2  1935        ghi  C (1933 - 1935)

    3  1911        jkl  A (1911 - 1913)


    # align the columns:

    df= df.reindex(["year_gr","year","other_cols"], axis=1)

   Out:

               year_gr  year other_cols

    0  A (1911 - 1913)  1911        abc

    1  B (1921 - 1923)  1923        def

    2  C (1933 - 1935)  1935        ghi

    3  A (1911 - 1913)  1911        jkl


查看完整回答
反对 回复 2022-06-02
  • 1 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信