首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按给定的间隔和计数对熊猫value_counts的数据进行量化、组合的绘图

按给定的间隔和计数对熊猫value_counts的数据进行量化、组合的绘图
EN

Stack Overflow用户
提问于 2022-09-22 15:41:58
回答 1查看 57关注 0票数 1

我试图使用Pandas value_counts作为输出,在python中创建一个条形图。对于背景数据,数据是来自森林火灾数据集的温度测量。下面是我用来获取bin_counts的代码(它是一个Series对象)

代码语言:javascript
复制
def discretizeData(cur_dataset, col_name, num_bins, bin_opts):
    '''
    cur_dataset: dataset containing values to be discretized
    col_name: column name for discretization
    bin_opts: array, containing either single value for number of bins, or 
    discretization_type: type of discretization (either 'equal-width' or 'equal-frequency')
    '''
    
    # Select specific data column for binning
    data_to_bin = cur_dataset[col_name]
    
    # Choose between equal width or equal frequency
    if bin_opts=='equal-frequency':
        # If "equal-frequency", we want to use the pandas qcut option for binning
        binned_data = pd.qcut(data_to_bin, q=num_bins)
    else:
        # Use equl-width instead
        binned_data = pd.cut(data_to_bin, bins=num_bins)
    
    # Get the bin counts to return; this will be more useful
    bin_counts = binned_data.value_counts().sort_index()
    
    return bin_counts

下面是一个使用等频率绑定选项运行该函数的示例:

代码语言:javascript
复制
fires = dataset_dict['forestfires']
col_name = 'temp'
num_bins = 5
bin_opts='equal-frequency'

输出是一个Pandas对象,其索引为Interval对象,并将该间隔计数为列值。看起来是这样的:

代码语言:javascript
复制
    Equal Frequency Binning Example:
(2.1990000000000003, 14.42]    104
(14.42, 17.9]                  104
(17.9, 20.6]                   106
(20.6, 23.58]                   99
(23.58, 33.3]                  104
Name: temp, dtype: int64

我还尝试将其转换为Pandas DataFrame,使用bin_width作为一列,count作为第二列,但我找不到任何能够处理间隔的绘图库。我已经试过了。有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2022-09-22 15:58:37

您需要手动绘制:

代码语言:javascript
复制
df = pd.DataFrame({'value': np.random.normal(10,size=1000)})

counts = discretizeData(df, 'value', 10, 'equal-frequency')

plt.bar([x.left for x in counts.index], counts, width=[x.right - x.left for x in counts.index])

输出:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73817401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档