我有数据显示不同的属性及其在总单位方面的大小,以及它们是否有电缆.我想要对数据进行采样,以便直方图的每个柱状图都有相同数量的基于cable ind的观察值.

import seaborn as sns

# Data
data = {
    'size': [10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 30, 30, 40, 40, 50, 50, 60, 60, 60],
    'cable_ind': [0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0]
}

# Creating histogram with hue
sns.histplot(data=data, x='size', hue='cable_ind', bins=[10, 20, 30, 40, 50, 60, 70], alpha = .5)

# Displaying the histogram
plt.show()

生成此直方图:

enter image description here

基本上,我希望对数据进行采样,以便上面的每个bin都有相同的数字cable_ind = 0cable_ind = 1.

编辑:我正在处理的真实数据集大约是50,000条记录.

编辑:编辑:代码错误,重写并复制了剧情.

推荐答案

您可以使用cut来形成bin,然后计算Cable_ind和bin的crosstab,得到每个bin的min.最后,使用sample调整数据帧,并使用cumcount获得最多可能值的数量:

data = {
    'size': [10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 30, 30, 40, 40, 50, 50, 60, 60, 60],
    'cable_ind': [0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0]
}

df = pd.DataFrame(data)

# compute bins
bin_s = pd.cut(df['size'], bins=[10, 20, 30, 40, 50, 60, 70], right=False)

# compute crosstab, determine the max number of items to keep per bin
keep = pd.crosstab(df['cable_ind'], bin_s).min()

# shuffle (optional), get up to the max number of common items per bin
out = df[df.sample(frac=1) # only if you want a random sampling
           .groupby(['cable_ind', bin_s])
           .cumcount().lt(bin_s.map(keep))]

输出示例(为清楚起见,以bin_s为列):

    size  cable_ind     bin_s
0     10          0  [10, 20)
6     10          1  [10, 20)
7     20          1  [20, 30)
8     20          0  [20, 30)
12    30          1  [30, 40)
13    30          0  [30, 40)
16    50          1  [50, 60)
17    50          0  [50, 60)
19    60          1  [60, 70)
20    60          0  [60, 70)

输出图表:

sns.histplot(data=out, x='size', hue='cable_ind',
             bins=[10, 20, 30, 40, 50, 60, 70],
             multiple='stack', edgecolor='black')

enter image description here

Python相关问答推荐

如何根据日期和时间将状态更新为已过期或活动?

如何在图片中找到这个化学测试条?OpenCV精明边缘检测不会绘制边界框

比较两个数据帧并并排附加结果(获取性能警告)

标题:如何在Python中使用嵌套饼图可视化分层数据?

有症状地 destruct 了Python中的regex?

将数据框架与导入的Excel文件一起使用

如何在Django基于类的视图中有效地使用UTE和RST HTIP方法?

Python虚拟环境的轻量级使用

将9个3x3矩阵按特定顺序排列成9x9矩阵

递归访问嵌套字典中的元素值

如何使用SentenceTransformers创建矢量嵌入?

基于形状而非距离的两个numpy数组相似性

如何杀死一个进程,我的Python可执行文件以sudo启动?

LocaleError:模块keras._' tf_keras. keras没有属性__internal_'''

python中csv. Dictreader. fieldname的类型是什么?'

在Python中从嵌套的for循环中获取插值

仅使用预先计算的排序获取排序元素

如何在表单中添加管理员风格的输入(PDF)

如何在Python中画一个只能在对角线内裁剪的圆?

将索引表转换为Numy数组