我有一个数据框架,想要绘制一个树状地图。但是,我希望定义每个树图类的边界的方式是基于范围而不是单个数字。我正在使用的示例使用单个数字。
下面是指定它的代码:
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()发布于 2019-09-13 01:08:19
您需要单独提供要在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‘列,然后使用apply function。这是更具可读性的。
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发布于 2019-09-13 01:28:58
使用groupby和pandas.cut
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'])).groupssquarify.plot(sizes=df['nb_people'], label=intervals, alpha=.8)
plt.show()输出图像:

https://stackoverflow.com/questions/57911405
复制相似问题