我有一系列数字,我已经使用pandas.cut打破了桶。
agepreg_cuts = pd.cut(df['agepreg'],[0,20,25,30,pd.np.inf], right=False)
然后我计算它并显示计数。
agepreg_count = (df.groupby(agepreg_cuts).count())
agepreg_count
这给了我比我想要的更多信息:
sest cmintvw totalwgt_lb
agepreg
[0, 20) 3182 0 1910
[20, 25) 4246 0 2962
[25, 30) 3178 0 2336
[30, inf) 2635 0 1830
现在我想格式化它:
INAPPLICABLE 352
0 to 20 3182
20 to 25 4246
25 to 30 3178
30 to 50 2635
Total 13593
这引出了几个问题。
[25,30)
中提取开始/结束属性(例如25/30)?作为参考,我使用的数据来自nsfg。免费图书thinkstats2包含github上的随附代码和数据。
来自'代码'目录,您可以运行以下行来加载数据帧。
import nsfg
df = nsfg.ReadFemPreg()
df
答案 0 :(得分:2)
您可以使用iterrows
在帧上使用迭代,然后处理分类值,如
In [679]: for x, i in agepreg_count.iterrows():
.....: print ' to '.join(x[1:-1].split(', ')), i['agepreg']
.....:
0 to 20 0
20 to 25 43
25 to 30 27
30 to inf 30
答案 1 :(得分:0)
如果你只是在寻找一个结构良好的字符串(你的例子建议它),你可以使用一个标签参数来剪切函数。
## create labels from breakpoints
breaks=[0,20,25,30,pd.np.inf]
diff=np.diff(breaks).tolist()
## make tuples of *breaks* and length of intervals
joint = list(zip(breaks,diff))
## format label
s1 = "{left:,.0f} to {right:,.0f}"
labels = [s1.format(left=yr[0], right=yr[0]+yr[1]-1) for yr in joint]
labels
['0 to 19', '20 to 24', '25 to 29', '30 to inf']
然后,使用breaks
和labels
剪切。
df['agebin'] = pd.cut(df['agepreg'],breaks, labels=labels, right=False)
总结:
df.groupby('agebin')['agebin'].size()