pandas - 如何在groupby中设置一个带有pandas条件的标志
问题描述
我有以下数据框
code date time product tank stock out_value
123 2019-06-20 07:00 MS 1 370 350
123 2019-06-20 07:30 HS 3 340 350
123 2019-06-20 07:00 MS 2 340 350
123 2019-06-20 07:30 HS 4 340 350
123 2019-06-20 08:00 MS 1 470 350
123 2019-06-20 08:30 HS 3 450 350
123 2019-06-20 08:00 MS 2 470 350
123 2019-06-20 08:30 HS 4 490 350
123 2019-06-20 09:30 HS 4 0 350
234 2019-06-20 09:30 HS 1 200 350
我想找出哪些stock
值小于out_value
上述数据框中的值,不包括0
值。例如,在产品的日期07:30
为 ro 代码时,有两个罐,因此,如果两个罐的库存都低于,则标志设置为。123
2019-06-20
HS
3
4
out_value
1
我想要的数据框是
code date time product tank stock out_value flag
123 2019-06-20 07:00 MS 1 370 350 0
123 2019-06-20 07:30 HS 3 340 350 1
123 2019-06-20 07:00 MS 2 340 350 0
123 2019-06-20 07:30 HS 4 340 350 1
123 2019-06-20 08:00 MS 1 470 350 0
123 2019-06-20 08:30 HS 3 450 350 0
123 2019-06-20 08:00 MS 2 470 350 0
123 2019-06-20 08:30 HS 4 490 350 0
123 2019-06-20 09:30 HS 4 0 350 0
234 2019-06-20 09:30 HS 1 200 350 1
我怎样才能在熊猫中做到这一点?
解决方案
如果需要检查与非0
值的差异,然后使用和检查每组True
的所有值:GroupBy.transform
GroupBy.all
df['flag'] = ((df['stock']<df['out_value']) & (df['stock'] !=0))
df['flag'] = df.groupby(['code','date','time','product'])['flag'].transform('all').astype(int)
print (df)
code date time product tank stock out_value flag
0 123 2019-06-20 07:00 MS 1 370 350 0
1 123 2019-06-20 07:30 HS 3 340 350 1
2 123 2019-06-20 07:00 MS 2 340 350 0
3 123 2019-06-20 07:30 HS 4 340 350 1
4 123 2019-06-20 08:00 MS 1 470 350 0
5 123 2019-06-20 08:30 HS 3 450 350 0
6 123 2019-06-20 08:00 MS 2 470 350 0
7 123 2019-06-20 08:30 HS 4 490 350 0
8 123 2019-06-20 09:30 HS 4 0 350 0
9 234 2019-06-20 09:30 HS 1 200 350 1
或者,如果只需要测试差异,请使用掩码测试每个组和最后一个链以测试非0
值:
df['flag'] = df['stock']<df['out_value']
mask = df.groupby(['code','date','time','product'])['flag'].transform('all')
df['flag'] = (mask & (df['stock'] !=0)).astype(int)
推荐阅读
- python - 如何通过添加字符串将返回值作为参数传递?
- json - 替换数组值的键对象
- sql - 父为PK的SQL中同一表查询中的递归父/子
- javascript - 由于复选框的关闭状态,脚本导致输出字段中的“关闭”值
- python - RuntimeError:大小不匹配,m1:[64 x 512],m2:[8192 x 512] 在 /pytorch/aten/src/THC/generic/THCTensorMathBlas.cu:290
- azure-devops - 克隆 Azure Devops yaml 管道
- ios - UITableViewCell 内的 UICollectionView 的 Swift 差异
- ruby-on-rails - Rails 6 中的根路由在哪里?
- vb6 - 如何创建或修改 VB6 exe 版本资源块以使其具有松鼠意识
- swift - 日历工作日符号星期一第一