pandas 我想改变panda中的bin范围格式

6vl6ewon  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(149)

我有一个 Dataframe ,我正在使用pd.qcut创建bin,如下所示:

us_counties['bins'] = pd.qcut(us_counties['economic connectedness'], q=10,precision=2)

这些存储箱包括:

us_counties.bins.cat.categories
IntervalIndex([(0.27999999999999997, 0.58], (0.58, 0.67], (0.67, 0.72], (0.72, 0.76], (0.76, 0.81], (0.81, 0.85], (0.85, 0.9], (0.9, 0.97], (0.97, 1.06], (1.06, 1.36]], dtype='interval[float64, right]')

我想改变他们的格式,使第一个bin〈0.58,中等的0.67-0.72和最后一个〉1.06。
我设法用下面的命令制作了中等格式的文件:

us_counties.bins.cat.categories = [f'{i.left} - {i.right}' for i in us_counties.bins.cat.categories]

我如何更改第一个和最后一个,以便以如下所示的垃圾箱结束:

['<0.58','0.58 - 0.67',....,'0.97 - 1.06','>1.06']
vojdkbi0

vojdkbi01#

您可能无法对qcut执行此操作,原因是qcut将数据点分配到大小相等的存储桶中。以您的方式,这种相等性将无法保持。例如,0.58对于qcut是包含的,但您希望它是不包含的。因此,您可以创建一个函数和另一个列,并使用apply函数为每一行分配一个bin。然后,基于新的列,您可以在下一轮中做任何您希望做的事情。如果我正确理解了您的情况,我可能会建议您这样做。

mfuanj7w

mfuanj7w2#

像这样的怎么样?

mybinlabels = [f'{i.left} - {i.right}' for i in us_counties.bins.cat.categories]
mybinlabels[0] = ["<"+str(i.right) for i in [us_counties.bins.cat.categories[0]]]
mybinlabels[-1] = [">"+str(i.left) for i in [us_counties.bins.cat.categories[-1]]]
us_counties.bins.cat.categories = mybinlabels

相关问题