python - 分成行数大致相等的组,并用平均值绘制条形图
问题描述
我有很多行:
df = pd.DataFrame(columns = ['param_1', 'param_2', ..., 'param_n'])
我需要将行分成几组并显示带有平均值的堆叠条:
bin_count = 10
step = math.ceil(df.shape[0] / bin_count)
df['p'] = 0
for i in range(0, df.shape[0], step):
df.iloc[i:i + step]['p'] = i
df_group = df.groupby('p').mean()
df_group.plot.bar(stacked = True)
如何更有效地做到这一点?
解决方案
用于通过根据 DataFrame 的长度pd.qcut
传递它来拆分range
DataFrame。
样本数据
import pandas as pd
import numpy as np
# 111 rows to split into (10) groups
Nr = 111
df = pd.DataFrame({'param_1': np.random.randint(0, 10, Nr),
'param_2': range(Nr)})
代码
# Number of bins
bin_count = 10
df_group = df.groupby(pd.qcut(range(len(df)), bin_count, labels=False)).mean()
df_group.plot.bar(stacked=True, rot=0)
考虑到数据的长度,这将形成尽可能接近均匀大小的组,类似于np.array_split
df.groupby(pd.qcut(range(len(df)), bin_count, labels=False)).size()
0 12
1 11
2 11
3 11
4 11
5 11
6 11
7 11
8 11
9 11
dtype: int64
推荐阅读
- javascript - 如何从包含许多数组的对象中删除数组
- json - 如何在spark2.4之前从字符串的数组json中提取结构
- pwd - 'pwd' 未被识别为内部或外部命令,
- javascript - 如何在函数中使用 classNames 库进行反应?
- java - 通过 Spring Boot / Spring Security UserDetailsService 的身份验证在成功身份验证后导致 302
- laravel - 为 laravel 护照中的每个请求获取“未经身份验证”的消息
- ios - Swift 日期格式化程序奇怪的问题
- python - 如何在 pyqt5 中为旋转设置动画?
- laravel - 登录或注册后 Laravel 8 Fortify Livewire 自定义重定向重定向
- html - 如何为多级html属性创建nth-child CSS