熊猫获得连续周订单的计数 null

我有一个如下所示的数据框。我想找出从上周(202008 年)开始按国家和产品的连续周数下降。


import pandas as pd


raw_data = {'Country': ['UK','UK','UK','UK','UK','UK','UK','UK','UK','UK','UK','UK','US','US','UK','UK'],

            'Product':['A','A','A','A','A','A','A','A','B','B','B','B','C','C','D','D'],

            'Week': [202001,202002,202003,202004,202005,202006,202007,202008,202001,202006,202007,202008,202006,202008,202007,202008],

    'Orders': [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}


df = pd.DataFrame(raw_data, columns = ['Country','Product','Week','Orders'])


df2 = df.pivot_table(index=['Country','Product'], columns='Week',values='Orders', aggfunc='size').reset_index()

http://img2.mukewang.com/62cd1f640001c8f205040099.jpg

我想在输出下面检查它从上周开始的连续数周它为空。

http://img3.mukewang.com/62cd1f6d0001027d06610095.jpg


慕丝7291255
浏览 80回答 1
1回答

MYYA

利用:#remove reset_index()df2 = df.pivot_table(index=['Country','Product'],                     columns='Week',                     values='Orders',                      aggfunc='size')#compare if non missing values from backa = df2.notna().iloc[:, ::-1]#running sumb = a.cumsum(axis=1)#counter only for consecutive valuesdf = b-b.mask(a).ffill(axis=1).fillna(0).astype(int)#convert all another consecutive values to 0 and get max for count last consecutive valsval = df.mask(df.eq(0).cumsum(axis=1).ne(0), 0).max(axis=1).astype(str) #if 1 value different textdf2['Text'] = np.where(val != '1',                        'Last ' + val + ' consecutive weeks is not null',                        'Last ' + val + ' week is not null')#connvert MultiIndex to columnsdf2 = df2.reset_index()print (df2)Week Country Product  202001  202002  202003  202004  202005  202006  202007  \0         UK       A     1.0     1.0     1.0     1.0     1.0     1.0     1.0   1         UK       B     1.0     NaN     NaN     NaN     NaN     1.0     1.0   2         UK       D     NaN     NaN     NaN     NaN     NaN     NaN     1.0   3         US       C     NaN     NaN     NaN     NaN     NaN     1.0     NaN   Week  202008                                  Text  0        1.0  Last 8 consecutive weeks is not null  1        1.0  Last 3 consecutive weeks is not null  2        1.0  Last 2 consecutive weeks is not null  3        1.0               Last 1 week is not null  
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python