首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于范围的分组的数据帧定义不起作用

基于范围的分组的数据帧定义不起作用
EN

Stack Overflow用户
提问于 2019-09-13 00:57:50
回答 2查看 37关注 0票数 0

我有一个数据框架,想要绘制一个树状地图。但是,我希望定义每个树图类的边界的方式是基于范围而不是单个数字。我正在使用的示例使用单个数字。

下面是指定它的代码:

代码语言:javascript
复制
df = pd.DataFrame({'nb_people':[8,3,4,2], 'group':["group A", "group B", "group C", "group D"] })

相反,我想这样分组:

A组: 0-2

B组: 3-5

C组:>6

我找不到一种解决方案,可以将基于范围的分组合并到数据帧定义中。我希望有人能指点一下。提前谢谢你。

代码语言:javascript
复制
pip install squarify
import matplotlib.pyplot as plt
import squarify   


MODIFY THIS PART! df = pd.DataFrame({'nb_people':[8,3,4,2], 'group':["group A", "group B", "group C", "group D"] })

squarify.plot(sizes=df['nb_people'], label=df['group'], alpha=.8 )
plt.show()
EN

回答 2

Stack Overflow用户

发布于 2019-09-13 01:08:19

您需要单独提供要在DataFrame定义本身中使用的数组。

代码语言:javascript
复制
nb =[8,3,4,2]
df = pd.DataFrame({'nb_people':nb, 'group':["GROUP A" if 0 <= x <= 2 else "GROUP B" if 3 <= x <= 5 else "GROUP C" if x > 6 else "NO_GROUP" for x in nb]})

您还可以加载'nb_people‘列,然后使用apply function。这是更具可读性的

代码语言:javascript
复制
def my_func(row):
    if 0 <= row <= 2:
        return "GROUP A"
    elif 3 <= row <= 5:
        return "GROUP B"
    elif row > 6:
        return "GROUP C"
    else:
        return "NO_GROUP"

df = pd.DataFrame({'nb_people':[8,3,4,2]})

df['group'] = df['nb_people'].apply(myfunc)

输出(用于两种方式)

代码语言:javascript
复制
df

    nb_people   group
0   8       GROUP C
1   3       GROUP B
2   4       GROUP B
3   2       GROUP A
票数 0
EN

Stack Overflow用户

发布于 2019-09-13 01:28:58

使用groupby和pandas.cut

代码语言:javascript
复制
intervals=df.groupby(pd.cut(df["nb_people"], np.array([0,2,5,np.inf]),include_lowest=True,labels=['Group A','Group B','Group C'])).groups

代码语言:javascript
复制
squarify.plot(sizes=df['nb_people'], label=intervals, alpha=.8)
plt.show()

输出图像:

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

https://stackoverflow.com/questions/57911405

复制
相关文章

相似问题

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