将条件应用于df以获取聚合计数

时间:2017-08-10 15:44:16

标签: python pandas conditional-statements

我有这样的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 ['Expire']> df ['Year'])

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']),因为那会返回对我来说不必要的行。有没有办法只计算最后一个实例?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

IIUC:您可以使用.applysum的真值,即

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

输出:

Year
2001    0
2002    1
2003    2