为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕丝7291255 2022-07-12 14:56:12
我有一个如下所示的数据框。我想找出从上周(202008 年)开始按国家和产品的连续周数下降。import pandas as pdraw_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()我想在输出下面检查它从上周开始的连续数周它为空。
查看完整描述

1 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

利用:


#remove reset_index()

df2 = df.pivot_table(index=['Country','Product'],

                     columns='Week',

                     values='Orders', 

                     aggfunc='size')


#compare if non missing values from back

a = df2.notna().iloc[:, ::-1]

#running sum

b = a.cumsum(axis=1)

#counter only for consecutive values

df = 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 vals

val = df.mask(df.eq(0).cumsum(axis=1).ne(0), 0).max(axis=1).astype(str) 

#if 1 value different text

df2['Text'] = np.where(val != '1', 

                       'Last ' + val + ' consecutive weeks is not null', 

                       'Last ' + val + ' week is not null')

#connvert MultiIndex to columns

df2 = 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  


查看完整回答
反对 回复 2022-07-12
  • 1 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信