有没有办法获得groupby中最后一个值的出现次数?
这是一个示例数据框 -
df = pd.DataFrame({'ID': ['a1', 'a1', 'a1', 'a1', 'b2', 'b2', 'b2'],
'Price': [15, 12, 10, 10, 36, 34, 36]})
ID Price
0 a1 15
1 a1 12
2 a1 10
3 a1 10
4 b2 36
5 b2 34
6 b2 36
这是预期的输出 -
df.groupby('ID').agg({'Price': ['last', 'last_count']})
ID Price_last Price_last_count
a1 10 2
b2 36 2
我需要能够在 agg 中执行“last_count”操作。
回答
df.groupby('ID')['Price'].agg(lastvalue = 'last',
count = lambda x: sum(x==x.iloc[-1]) )
lastvalue count
ID
a1 10 2
b2 36 2
编辑以获取 OP 确切格式(由 Scott Boston 提供):
df.groupby('ID', as_index=False)
.agg(Price_last= ('Price' , 'last'),
Price_last_count=('Price' , lambda x: sum(x==x.iloc[-1])))
输出:
ID Price_last Price_last_count
0 a1 10 2
1 b2 36 2