使用 .cut() 对随机值进行分箱并将分箱放入新的 Pandas 数据框列

Bin Random Values Using .cut() on and place bins in new Pandas dataframe Columns

能完成下面的函数和for循环吗?无法弄清楚如何对以下列进行分箱,然后 1) 将分箱后的值放入新列中,以及 2) .add_prefix() 到前缀为 'bin_' 的新 7 列中的每一列?无法弄清楚如何使函数和 for 循环工作。

binner=list(range(0,6))
countofbins=len(binner)
df = pd.DataFrame(np.random.rand(20,7), columns=list('ABCDEFG'))
df['bin_A']=pd.cut(x=df['A'],bins=countofbins,labels=binner)

def calculate_bins(bincolumnname, oldcolumnname):
    for ind, column in enumerate(df.columns):
    df[bincolumnname] = pd.cut(x=df[oldcolumnname], bins=countofbins,labels=binner)
    return df[bincolumnname]

如果我没理解错的话,您正在尝试为数据框中的每一列创建新列,其中包含每个单元格所在的容器。

binner=list(range(0,6))
df = pd.DataFrame(np.random.randint(low=1, high=5,size=(20,7)), columns=list('ABCDEFG'))
for idx, col in enumerate(df.columns):
    df['bin_{}'.format(col)]=pd.cut(x=df.loc[:, col],bins=binner)

输出:

    A  B  C  D  E  F  G   bin_A   bin_B   bin_C   bin_D   bin_E   bin_F   bin_G
0   1  3  2  1  4  3  2  (0, 1]  (2, 3]  (1, 2]  (0, 1]  (3, 4]  (2, 3]  (1, 2]
1   1  1  3  2  4  4  4  (0, 1]  (0, 1]  (2, 3]  (1, 2]  (3, 4]  (3, 4]  (3, 4]
2   1  2  2  3  1  2  2  (0, 1]  (1, 2]  (1, 2]  (2, 3]  (0, 1]  (1, 2]  (1, 2]
3   1  1  1  2  2  1  3  (0, 1]  (0, 1]  (0, 1]  (1, 2]  (1, 2]  (0, 1]  (2, 3]
4   1  3  1  1  4  4  4  (0, 1]  (2, 3]  (0, 1]  (0, 1]  (3, 4]  (3, 4]  (3, 4]
5   4  3  3  1  1  3  1  (3, 4]  (2, 3]  (2, 3]  (0, 1]  (0, 1]  (2, 3]  (0, 1]
6   1  2  1  4  2  2  3  (0, 1]  (1, 2]  (0, 1]  (3, 4]  (1, 2]  (1, 2]  (2, 3]
7   4  2  2  1  3  2  3  (3, 4]  (1, 2]  (1, 2]  (0, 1]  (2, 3]  (1, 2]  (2, 3]
8   1  1  4  1  1  2  1  (0, 1]  (0, 1]  (3, 4]  (0, 1]  (0, 1]  (1, 2]  (0, 1]
9   3  1  4  1  3  2  4  (2, 3]  (0, 1]  (3, 4]  (0, 1]  (2, 3]  (1, 2]  (3, 4]
10  2  2  2  3  3  4  4  (1, 2]  (1, 2]  (1, 2]  (2, 3]  (2, 3]  (3, 4]  (3, 4]
11  1  2  1  1  4  3  3  (0, 1]  (1, 2]  (0, 1]  (0, 1]  (3, 4]  (2, 3]  (2, 3]
12  4  1  1  1  4  1  1  (3, 4]  (0, 1]  (0, 1]  (0, 1]  (3, 4]  (0, 1]  (0, 1]
13  1  2  4  4  2  4  3  (0, 1]  (1, 2]  (3, 4]  (3, 4]  (1, 2]  (3, 4]  (2, 3]
14  3  3  4  4  2  4  2  (2, 3]  (2, 3]  (3, 4]  (3, 4]  (1, 2]  (3, 4]  (1, 2]
15  1  4  1  3  2  2  3  (0, 1]  (3, 4]  (0, 1]  (2, 3]  (1, 2]  (1, 2]  (2, 3]
16  4  2  2  3  2  1  2  (3, 4]  (1, 2]  (1, 2]  (2, 3]  (1, 2]  (0, 1]  (1, 2]
17  1  2  3  4  3  2  3  (0, 1]  (1, 2]  (2, 3]  (3, 4]  (2, 3]  (1, 2]  (2, 3]
18  2  3  3  2  3  3  3  (1, 2]  (2, 3]  (2, 3]  (1, 2]  (2, 3]  (2, 3]  (2, 3]
19  2  4  1  1  3  2  4  (1, 2]  (3, 4]  (0, 1]  (0, 1]  (2, 3]  (1, 2]  (3, 4]

您可以使用 pandas.cut()

中的 labels 参数更改垃圾箱的标签