首页 > 解决方案 > 基于范围的分组的数据框定义不起作用

问题描述

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

这是指定它的代码:

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

我找不到在数据框定义中包含基于范围的分组的解决方案。希望有人指导。先感谢您。

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()

标签: python-3.xpandasdataframe

解决方案


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

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”列,然后使用应用功能。这更具可读性

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)

输出(双向)

df

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

推荐阅读