基于Pandas Groupby统计各masterid的价格变更次数
Pandas按masterid统计价格变更次数
可以通过分组后比较相邻价格实现需求,核心是结合groupby与shift、ne方法,具体步骤如下:
完整实现代码
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'masterid': [1001, 1001, 1001, 1001, 1002, 1003, 1003, 1003, 1004, 1004], 'price': [12, 12, 11, 14, 15, 10, 10, 10, 16, 17] }) # 分组统计价格变更次数 result = df.groupby('masterid')['price'].apply( lambda x: x.ne(x.shift()).sum() - 1 # 减去第一行的无效计数 ).reset_index(name='price') print(result)
代码说明
x.ne(x.shift()):在每个masterid分组内,将当前行价格与上一行比较,价格不同返回True(计为1),相同返回False(计为0).sum() - 1:统计组内差异次数时,每组第一行的shift()结果为NaN,ne会误判为True,因此减1排除这个无效计数reset_index(name='price'):将分组后的索引转为列,并把统计结果列重命名为price
执行后输出:
masterid price 0 1001 2 1 1002 0 2 1003 0 3 1004 1
内容的提问来源于stack exchange,提问作者Ash
相关产品推荐
相关产品推荐

