Python在Pandas Datafram中寻找最长的连续运行

2024-05-14 21:31:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas dataframe,它包含以下变量:week、产品代码、constraint flag(0或1表示产品供应是否受到限制)。在

Week    Product_Code    Constraint_Flag
1           A                1
1           B                0
2           A                0
2           B                1
3           A                0
3           B                0
4           A                0
4           B                0
5           A                1
5           B                0    

我想找出供应不受限制的最长时间段,即每个产品代码0的最长字符串。因此,对于产品A,我想知道最长的字符串开始于第3周,持续了2周;对于产品B,最长的字符串开始于第3周,持续了3周。在

我该怎么做?在


Tags: 字符串代码dataframepandas产品codeproductflag
1条回答
网友
1楼 · 发布于 2024-05-14 21:31:31

使用this solution只查找最长的0周期,然后使用聚合的第一个和最后一个进行筛选:

m  = np.concatenate(( [True], df['Constraint_Flag'] != 0, [True] ))
ss = np.flatnonzero(m[1:] != m[:-1]).reshape(-1,2)
s, e = ss[(ss[:,1] - ss[:,0]).argmax()]
pos = df.columns.get_loc('Week')
print (s,e)
4 8

print (df.iloc[s:e])
   Week Product_Code  Constraint_Flag
4     3            A                0
5     3            B                0
6     4            A                0
7     4            B                0

df = df.iloc[s:e].groupby('Product_Code')['Week'].agg(['first','last'])
print (df)
              first  last
Product_Code             
A                 3     4
B                 3     4

但如果需要按组比较:

^{pr2}$

相关问题 更多 >

    热门问题