使用Pandas和Numpy的Groupby条件语句

时间:2016-02-07 01:33:49

标签: python-2.7 numpy pandas

我有一个使用pandas创建的数据框如下:

       0          1
0   1985   4.274394
1   1985   0.043272
2   1985   0.000000
3   1986   1.835303
4   1986   0.046057
.   ....   ........ 

我喜欢使用上面的年份列,并在groupby中将以下步骤作为条件应用,以便只返回那些大于条件的年度值:

b = sorted(a, reverse = False) # 'a' is list (column 1 from above)
c = np.array(b)
d = np.diff(np.cumsum(c) >= sum(c) * 0.60)
e = np.array(d).tolist()

任何帮助都会很有意义。

1 个答案:

答案 0 :(得分:1)

从您的数据:

import pandas as pd
u=pd.read_csv('data.txt',sep='\s+')     # from your data

首先准备:

us = u.sort(['0','1'],ascending=[1,0])
g=us.groupby('0')
us2=us.merge(g.sum().reset_index(),'left','0')
us2.columns=['year','value','gsum']
us2['gcumsum']=g.cumsum()

那么us2就是:

   year     value      gsum   gcumsum
0  1985  4.274394  4.317666  4.274394
1  1985  0.043272  4.317666  4.317666
2  1985  0.000000  4.317666  4.317666
3  1986  1.835303  1.881360  1.835303
4  1986  0.046057  1.881360  1.881360

其次,选择:

select=us2[us2.gcumsum>us2.gsum*.6]
g2=select.groupby('year').first()

g2是:

         value      gsum   gcumsum
year                              
1985  4.274394  4.317666  4.274394
1986  1.835303  1.881360  1.835303