python-3.x - 如何使每个数据箱成为数据框的列
问题描述
我有 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
解决方案
首先将参数添加label
到cut
,然后按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
推荐阅读
- c - Valgrind 显示错误调用 pr_set_ptracer,vgdb 可能会阻塞
- reactjs - 无法读取未定义的属性“地图”,错误
- jquery - 使用fadeIn和fadeOut隐藏和显示div不起作用
- parallel-processing - slurm Job Array 和 Job Step 性能的差异
- python - 如何使用 BeautifulSoup 在网页抓取中找到元素的价值?
- python - Python脚本的保证设法完成读取已删除的文件
- math - 获得2个矩阵之间的局部变换
- python-3.x - 如何修复'RuntimeError:会话图为空。在调用 run() 之前向图中添加操作。”
- laravel - How to define schema migration Laravel Postgres?
- javascript - 运行 mocha 测试时如何解决所有错误?