Skip to main content
 首页 » 编程设计

python之Pandas 条件累计和

2025年05月04日17exmyth

我正在处理中间有空值的数据。我打算根据特定列 sales 的累计总和构建一个时间序列图。 sales 的累积总和条件: (1.) 如果第一行为空,fillna(0),然后是 cumsum(),因此 plot 可以总是从原点开始。 (2.) 如果 null 行彼此跟随到最后,则保留为 null else fillna(0):

data = {'year': [2010, 2011, 2012, 2013, 2014, 2015, 2016,2017, 2018, 2019], 
        'quantity': [10, 21, 20, 10, 39, 30, 31,45, 23, 56], 
        'sales': [None, 41, None, None, 32, 0, 31,None, None, None]} 
 
df = pd.DataFrame(data) 
df = df.set_index('year') 
 
df['cum_sales'] = df[['sales']].cumsum() 
 
print df 
df.plot() 

如何应用条件使结果变为:

请您参考如下方法:

我们将结合使用 bfill 和 combine_first。当我们回填 sales 列时,我们填充了任何缺失值,然后是非缺失数据,从而满足条件 (2)。但是,我仅使用它来识别那些确实满足条件 (2) 的位置,因为我随后会将这些位置乘以零并使用它来填充缺失值。我实际上并不想回填数据。 combine_first 首先从第一个数据帧中获取值,如果它丢失,它将尝试从第二个数据帧中获取它。因此,不满足条件 2 的缺失值将用零填充,否则将保持缺失状态。

很多话题:

df.sales = df.sales.combine_first(df.sales.bfill() * 0) 
 
df.cum_sales = df.sales.cumsum() 
 
print df 
 
      quantity  sales  cum_sales 
year                             
2010        10    0.0        0.0 
2011        21   41.0       41.0 
2012        20    0.0       41.0 
2013        10    0.0       41.0 
2014        39   32.0       73.0 
2015        30    0.0       73.0 
2016        31   31.0      104.0 
2017        45    NaN        NaN 
2018        23    NaN        NaN 
2019        56    NaN        NaN 

剧情:

df.plot()