用累积量填充连续的 NaN,以在每个连续的 NaN 上增加一个



给定一个在某个 inverval 中有很多缺失值的数据帧,我想要的输出数据帧应该用从第一个有效值开始的cumsum填充所有连续NaN,并为每个NaN添加1

鉴于:

shop_id calendar_date quantity
0       2018-12-12      1  
1       2018-12-13      NaN    
2       2018-12-14      NaN    
3       2018-12-15      NaN
4       2018-12-16      1
5       2018-12-17      NaN

期望输出:

shop_id calendar_date quantity 
0       2018-12-12      1    
1       2018-12-13      2    
2       2018-12-14      3    
3       2018-12-15      4
4       2018-12-16      1
5       2018-12-17      2

使用:

g = (~df.quantity.isnull()).cumsum()
df['quantity'] = df.fillna(1).groupby(g).quantity.cumsum()
      shop_id calendar_date  quantity
0        0    2018-12-12       1.0
1        1    2018-12-13       2.0
2        2    2018-12-14       3.0
3        3    2018-12-15       4.0
4        4    2018-12-16       1.0
5        5    2018-12-17       2.0

使用 .isnull() 检查 quantity 具有有效值的位置,并取布尔系列的cumsum

g = (~df.quantity.isnull()).cumsum()
0    1
1    1
2    1
3    1
4    2
5    2

使用fillna因此,当您按g分组并采用cusmum时,值将从任何值开始增加:

df.fillna(1).groupby(g).quantity.cumsum()
0    1.0
1    2.0
2    3.0
3    4.0
4    1.0
5    2.0

另一种方法?

数据

   shop_id calender_date  quantity
0        0    2018-12-12       1.0
1        1    2018-12-13       NaN
2        2    2018-12-14       NaN
3        3    2018-12-15       NaN
4        4    2018-12-16       1.0
5        5    2018-12-17       NaN
6        6    2018-12-18       NaN
7        7    2018-12-17       NaN

使用 NP.where

where = np.where(data['quantity'] >= 1)
r = []
for i in range(len(where[0])):
    try:
        r.extend(np.arange(1,where[0][i+1] - where[0][i]+1))
    except:
        r.extend(np.arange(1,len(data)-where[0][i]+1))
data['quantity'] = r

打印(数据)

   shop_id calender_date  quantity
0        0    2018-12-12         1
1        1    2018-12-13         2
2        2    2018-12-14         3
3        3    2018-12-15         4
4        4    2018-12-16         1
5        5    2018-12-17         2
6        6    2018-12-18         3
7        7    2018-12-17         4

相关内容

  • 没有找到相关文章

最新更新