Python:如何查找系列中项目的属性

时间:2015-10-17 16:33:07

标签: python pandas

我有一系列数字,我已经使用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

这引出了几个问题。

  1. 如何从bin [25,30)中提取开始/结束属性(例如25/30)?
  2. 如何发现系列中的属性,以便我不必问上一个问题?
  3. 作为参考,我使用的数据来自nsfg。免费图书thinkstats2包含github上的随附代码和数据。

    来自'代码'目录,您可以运行以下行来加载数据帧。

    import nsfg
    df = nsfg.ReadFemPreg()
    df
    

2 个答案:

答案 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']

然后,使用breakslabels剪切。

df['agebin'] = pd.cut(df['agepreg'],breaks, labels=labels, right=False)

总结:

df.groupby('agebin')['agebin'].size()