我使用pandas.cut
离散化了dataframe中的一列,其中bin由IntervalIndex.from_tuples
创建。
剪切按预期工作,但是类别显示为我在IntervalIndex
中指定的元组。有没有办法将类别重命名为不同的标签,例如(小,中,大)?
示例:
bins = pd.IntervalIndex.from_tuples([(0, 1), (2, 3), (4, 5)])
pd.cut([0, 0.5, 1.5, 2.5, 4.5], bins)
产生的类别为:
[NaN, (0, 1], NaN, (2, 3], (4, 5]]
Categories (3, interval[int64]): [(0, 1] < (2, 3] < (4, 5]]
我正在尝试将[(0, 1] < (2, 3] < (4, 5]]
更改为类似1, 2 ,3
或small, medium ,large
的内容。
遗憾的是,在使用IntervalIndex时,pd. cut的labels参数参数被忽略。
谢谢!
- 更新日期:**
感谢@SergeyBushmanov,我注意到这个问题只存在于试图更改 Dataframe 内的类别标签时(这是我正在尝试做的)。
In [1]: df = pd.DataFrame([0, 0.5, 1.5, 2.5, 4.5], columns = ['col1'])
In [2]: bins = pd.IntervalIndex.from_tuples([(0, 1), (2, 3), (4, 5)])
In [3]: df['col1'] = pd.cut(df['col1'], bins)
In [4]: df['col1'].categories = ['small','med','large']
In [5]: df['col1']
Out [5]:
0 NaN
1 (0, 1]
2 NaN
3 (2, 3]
4 (4, 5]
Name: col1, dtype: category
Categories (3, interval[int64]): [(0, 1] < (2, 3] < (4, 5]]
2条答案
按热度按时间093gszye1#
如果我们有一些数据:
您可以尝试重新分配类别,例如:
或:
在更新版本的panda中,不使用
x.categories = [1, 2, 3]
重新分配类别,而是使用x.cat.rename_categories
:labels
可以是任何类型,并且在任何情况下,将保留在创建pd.IntervalIndex
时设置的原始分类顺序。mctunoxg2#