pandas把分箱后列作为列标签透视后,再添加列时再次遇坑。话不多说,先上代码,首先创建个DataFrame
import pandas as pd
date = pd.DataFrame({'a':[1,1,3,3,5],'b':[7,8,9,10,11],'c':[101,201,301,401,501]})
对c列进行分箱,并把结果添加到date的d列
bins = [100,200,300,400,500,600]
date['d'] = pd.cut(date['c'],bins)
date
此时,对数据进行处理,先把a、d列作为索引对b列求和,再把d列作为列去堆叠。
date2 = date.groupby(['a','d'])['b'].sum().unstack(level=1)
date2
下面,重点来啦。我想增加一列,结果就报错了:cannot determine next label for type <class 'str'>
date2['e'] = 1
经过一番折腾,结果发现,date2的列名不是普通的字符串,而是:pandas.core.indexes.category.CategoricalIndex。所以直接加列时,推断不出新增列名的格式了。
怎么办呢?在进行groupby之前,先把分箱列转为‘str’格式就解决啦。
date['d'] = date['d'].astype('str')
date2 = date.groupby(['a','d'])['b'].sum().unstack(level=1)
date2['e'] = 1
date2
利用python处理数据的路上路远且艰,一步一坑,解决一个小问题都得花很大的精力。与同在路上的朋友们共勉~~