首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于预定义桶的百分比桶

基于预定义桶的百分比桶
EN

Stack Overflow用户
提问于 2017-07-27 23:24:41
回答 1查看 565关注 0票数 1

我有一个系列的数字,我想知道%的数字落在每一桶的数据。

df['cuts']的值为10、20和50。具体来说,我想知道series的%在[0-10], (10-20] and (20-50] bin中,这应该附加到df数据框架中。

我写了以下代码。我绝对觉得这可能是临时的。任何帮助都是非常感谢的。

代码语言:javascript
复制
bin_cuts = [-1] + list(df['cuts'].values)
out = pd.cut(series, bins = bin_cuts)
df_pct_bins = pd.value_counts(out, normalize= True).reset_index()
df_pct_bins = pd.concat([df_pct_bins['index'].str.split(', ', expand = True), df_pct_bins['cuts']], axis = 1)
df_pct_bins[1] = df_pct_bins[1].str[:-1].astype(str)
df['cuts'] = df['cuts'].astype(str)
df_pct_bins = pd.merge(df, df_pct_bins, left_on= 'cuts', right_on= 1)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-27 23:43:47

考虑一下示例数据dfs

代码语言:javascript
复制
df = pd.DataFrame(dict(cuts=[10, 20, 50]))
s = pd.Series(np.random.randint(50, size=1000))

选项1

np.searchsorted

代码语言:javascript
复制
c = df.cuts.values
df.assign(
    pct=df.cuts.map(
        pd.value_counts(
            c[np.searchsorted(c, s)],
            normalize=True
        )))

   cuts    pct
0    10  0.216
1    20  0.206
2    50  0.578

选项2

pd.cut

代码语言:javascript
复制
c = df.cuts.values
df.assign(
    pct=df.cuts.map(
        pd.cut(
            s,
            np.append(-np.inf, c),
            labels=c
        ).value_counts(normalize=True)
    ))

   cuts    pct
0    10  0.216
1    20  0.206
2    50  0.578
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45362551

复制
相关文章

相似问题

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