我有一个使用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()
任何帮助都会很有意义。
答案 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