python - 熊猫在列中找到最大连续下降周数
问题描述
我有一个如下所示的数据框。我想知道 ID 和产品方面最多连续下降多少周。
import pandas as pd
raw_data = {'ID': ['101', '101', '101','101', '101', '101', '102', '102', '102', '102','102', '103', '103', '103', '103','104', '104', '104', '104','104','104'],
'product':['x','x','x','x','x','x','z','z','z','z','z','y','y','y','y','x','x','x','x','x','x'],
'Week': ['201828','201829','201830','201831','201832','201833','201829','201830','201831','201832','201830','201831','201832','201833','201830','201831','201832','201833','201834','201835','201836'],
'Orders': ['-15%','-4%','-6%','6%','-10%','15%','-26%','-15%','-56%','-15%','-4%', '5%', '-10%', '-10%', '15%', '-20%', '-11%','10%', '-15%', '-20%','-26%']}
df2 = pd.DataFrame(raw_data, columns = ['ID','product','Week','Orders'])
想要的输出:
解决方案
使用cumsum
创建附加键的一种方法
s=df2['Orders'].str.contains('-')
df2[s].groupby([df2.ID,(~s).groupby(df2['ID']).cumsum(),df2['product']]).size().max(level=[0,2])
Out[202]:
ID product
101 x 3
102 z 5
103 y 2
104 x 3
dtype: int64
推荐阅读
- cmd - 如何通过 CMD 解压 *.cab 文件?
- javascript - 如何访问 Sequelize 对象的操作符属性?
- docker - docker image layer ids是如何派生的
- oracle - 使用 SQL Developer 和 PL/SQL 在本地文件系统上创建目录
- wordpress - 将 WordPress 网址更改为搜索友好
- javascript - Thymeleaf 使用模型图中的 Spring 值填充 th:attr
- java - JavaFX 按特定字符排序
- sql - 为什么在具有大约 50k 行的多个表上进行连接的存储过程需要很长时间才能执行?
- amazon-web-services - 如何在 aws 中为 cname 设置 ssl 证书?
- java - Spring Boot 和 EhCache 3 在服务层上不起作用