首页 > 解决方案 > 如何使每个数据箱成为数据框的列

问题描述

我有 A 列的数据框,我想将 bin 中的列和每个 bin 的计数划分为 dataframe 的列,例如 bin 从 0 到多少点并将其添加到数据框中。

我使用此代码进行分箱,但我不确定如何在 df 中插入计数列。

df=pd.DataFrame({'max':[0.2,0.3,1,1.5,2.5,0.2]})
print(df)
   max
0  0.2
1  0.3
2  1.0
3  1.5
4  2.5
5  0.2

    bins = [0, 0.5, 1, 1.5, 2, 2.5]

    x=pd.cut(df['max'], bins)

期望的输出

print(df)
   0_0.5_count  0.5_1_count
0            3            1

标签: python-3.xpandasnumpy

解决方案


首先将参数添加labelcut,然后按Series.value_counts和 为 DataFrame 使用Series.to_frame与 transpose by 一起计数DataFrame.T

bins = [0, 0.5, 1, 1.5, 2, 2.5]

labels = ['{}_{}_count'.format(i, j) for i, j in zip(bins[:-1], bins[1:])] 
x=pd.cut(df['max'], bins, labels=labels).value_counts().sort_index().to_frame(0).T
print (x)

   0_0.5_count  0.5_1_count  1_1.5_count  1.5_2_count  2_2.5_count
0            3            1            1            0            1

详情

print (pd.cut(df['max'], bins, labels=labels))
0    0_0.5_count
1    0_0.5_count
2    0.5_1_count
3    1_1.5_count
4    2_2.5_count
5    0_0.5_count
Name: max, dtype: category
Categories (5, object): [0_0.5_count < 0.5_1_count < 1_1.5_count < 1.5_2_count < 2_2.5_count]

print (pd.cut(df['max'], bins, labels=labels).value_counts())
0_0.5_count    3
2_2.5_count    1
1_1.5_count    1
0.5_1_count    1
1.5_2_count    0
Name: max, dtype: int64  

替代解决方案GroupBy.size

bins = [0, 0.5, 1, 1.5, 2, 2.5]

labels = ['{}_{}_count'.format(i, j) for i, j in zip(bins[:-1], bins[1:])] 
x= df.groupby(pd.cut(df['max'], bins, labels=labels)).size().rename_axis(None).to_frame().T
print (x)
   0_0.5_count  0.5_1_count  1_1.5_count  1.5_2_count  2_2.5_count
0            3            1            1            0            1

推荐阅读