python - 按功能分组后将值与前一个值进行比较
问题描述
我将我的数据分组如下: df1 = df.groupby(['Store', 'Region', 'Item'])
STORE REGION
Store1 West Item price result
1 1.00 0
2 2.00 0
3 2.00 0
2.50 1
4 1.00 0
1.00 0
.50 1
1.00 1
基本上我想用 1 和 0 表示价格是否有变化,如果没有价格变化。如果每件商品只有一个价格,那么我希望在这些情况下也返回 0。
我已经用下面的代码试过了,但是失败了:
data_cleaned.groupby(['STORE', 'REGION', 'Item'])['price'].apply(lambda x: 1 if x == x.change.shift(1) else 0})
解决方案
您可以groupby
使用diff
. 这是一个演示:
df = pd.DataFrame({'Item': [1, 2, 3, 3, 4, 4, 4, 4],
'price': [1, 2, 2, 2.5, 1, 1, 0.5, 1]})
df = df.set_index('Item')
df['change'] = df.groupby(level=0)['price'].diff().abs().gt(0).astype(int)
print(df)
price change
Item
1 1.0 0
2 2.0 0
3 2.0 0
3 2.5 1
4 1.0 0
4 1.0 0
4 0.5 1
4 1.0 1
推荐阅读
- reactjs - React JS:删除 URL 中字符串的一部分
- java - 如何在不解析为 Java 对象的情况下按键获取动态 JSON 值?
- unity3d - 如何通过脚本(我想将我的标签和按钮添加到面板)统一制作带有浅白色边框的面板
- jenkins - 詹金斯“IF and Else”无法正常工作。(时髦)
- python - 过滤 Django ResourceRelatedField 的查询集
- php - Square API Search user by Email - 旧版 Sandbox 不支持端点
- c++ - C++ conditional template class definition of member function
- sqlite - Sqlite 删除特定时间范围内的重复项
- django - 防止 collectstatic 尝试访问数据库
- node.js - 节点 Cloudinary 图片上传在 Heroku 中不起作用