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

我有一个包含多列的 Pandas DataFrame。其中之一是year. 在此列中,我想创建一个具有分类值的新列(我猜 therm 是存储桶),并自动生成存储桶。它应该导致类似的结果:


year_gr         year    other_cols

A (1909 - 1917) 1911    abc

B (1921 - 1930) 1923    def

C (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_gr


df.head()


year_gr year    other_cols

A       1911    abc

B       1923    def

C       1935    ghi

但是如何将自动生成的愤怒连接pd.cut到我的year_gr变量?我看到我们可以retbins=True在cut命令中添加参数来提取垃圾箱,但我没有设法利用它......


谢谢!


噜噜哒
浏览 106回答 1
1回答

青春有我

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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python