2017-08-10 17 views
1

我有这样的DF结构这样的,在那里每年都有相同的行/项:申请条件的DF拿到总统计

Year Name Expire 

2001 Bob  2002 
2001 Tim  2003 
2001 Will 2004 
2002 Bob  2002 
2002 Tim  2003 
2002 Will 2004 
2003 Bob  2002 
2003 Tim  2003 
2003 Will 2004 

我已经子集的DF(DF [DF [”过期 ']> DF [' 年'])

2001 Bob  2002 
2001 Tim  2003 
2001 Will 2004 
2002 Tim  2003 
2002 Will 2004 
2003 Will 2004 

现在我要回计每年的名字到期的量,是这样的:

Year count 
2001  0 
2002  1 
2003  1 

我该如何做到这一点?我不能这样做(df [df ['Expire'] < = df ['Year'])['name'] .groupby('Year')。agg(['count']),因为那样会返回不必要的为我排。任何只计算最后一次实例的方法?

+0

不是'df.groupby(['Expire'])['Name']。count()'你需要什么? –

回答

0

IIUC:您可以使用.apply和真正的价值sum

df.groupby('Year').apply(lambda x: (x['Expire']<=x['Year']).sum()) 

输出:

 
Year 
2001 0 
2002 1 
2003 2 
2

您可以使用groupby与布尔面具和骨料sum

print (df['Expire']<= df['Year']) 
0 False 
1 False 
2 False 
3  True 
4 False 
5 False 
6  True 
7  True 
8 False 
dtype: bool 

df=(df['Expire']<=df['Year']).groupby(df['Year']).sum().astype(int).reset_index(name='count') 
print (df) 
    Year count 
0 2001  0 
1 2002  1 
2 2003  2 

验证:

print (df[df['Expire']<= df['Year']]) 
    Year Name Expire 
3 2002 Bob 2002 
6 2003 Bob 2002 
7 2003 Tim 2003