我有这样的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']),因为那会返回对我来说不必要的行。有没有办法只计算最后一个实例?
答案 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:您可以使用.apply
和sum
的真值,即
df.groupby('Year').apply(lambda x: (x['Expire']<=x['Year']).sum())
输出:
Year 2001 0 2002 1 2003 2