编辑:添加了defT
使用pandas.cut
是否会更改pandas.DataFrame
的结构。
我正在使用pandas.cut
以以下方式将单个年龄映射到年龄组,然后在之后聚合。但是,聚合不起作用,因为我在被聚合的所有列中最后都是NaN
。这是我的代码:
cutoff = numpy.hstack([numpy.array(defT.MinAge[0]), defT.MaxAge.values])
labels = defT.AgeGrp
df['ageGrp'] = pandas.cut(df.Age,
bins = cutoff,
labels = labels,
include_lowest = True)
这里是灵巧的:
AgeGrp MaxAge MinAge
1 18 14
2 21 19
3 24 22
4 34 25
5 44 35
6 54 45
7 65 55
然后我将数据帧传递到另一个函数中进行聚合:
grouped = df.groupby(['Year', 'Month', 'OccID', 'ageGrp', 'Sex', \
'Race', 'Hisp', 'Educ'],
as_index = False)
final = grouped.aggregate(numpy.sum)
如果我通过这种方式将年龄更改为年龄组,那么它将完美地工作:
df['ageGrp'] = 1
df.ix[(df.Age >= 14) & (df.Age <= 18), 'ageGrp'] = 1 # Age 16 - 20
df.ix[(df.Age >= 19) & (df.Age <= 21), 'ageGrp'] = 2 # Age 21 - 25
df.ix[(df.Age >= 22) & (df.Age <= 24), 'ageGrp'] = 3 # Age 26 - 44
df.ix[(df.Age >= 25) & (df.Age <= 34), 'ageGrp'] = 4 # Age 45 - 64
df.ix[(df.Age >= 35) & (df.Age <= 44), 'ageGrp'] = 5 # Age 64 - 85
df.ix[(df.Age >= 45) & (df.Age <= 54), 'ageGrp'] = 6 # Age 64 - 85
df.ix[(df.Age >= 55) & (df.Age <= 64), 'ageGrp'] = 7 # Age 64 - 85
df.ix[df.Age >= 65, 'ageGrp'] = 8 # Age 85+
我更愿意动态地这样做,导入定义表并使用pandas.cut
,而不是硬编码。
提前谢谢你。
也许,这是个解决办法。
考虑下面的示例,该示例复制您描述的症状:
如果我们改变
到
然后我们得到:
相关问题 更多 >
编程相关推荐