Skip to main content
 首页 » 编程设计

python之当 na 进入 pandas 专栏时如何重置 cumprod

2025年05月04日16mengfanrong

我在数据框中有 2 列,我想为两者计算 cumprod,但是 cumprod 在单元格中看到 na 后需要重新启动

我试过直接使用 cumprod,但它没有给我正确的值,因为 cumprod 是连续的,当 na 出现时不会重新启动

这是一个例子 df

index     col1     col2 
0          2         4 
1          6         4 
2          1         na 
3          2         7 
4          na        6 
5          na        8 
6          5         na 
7          8         9  
8          3         2 
 

这是我想要的输出:

index     col1     col2 
0          2         4 
1          12        16 
2          12        na 
3          24        7 
4          na        42 
5          na        336 
6          5         na 
7          40        9  
8          240       18 
 

请您参考如下方法:

这是一个对每一列进行操作并将concats组合在一起的解决方案,因为每一列的掩码都不同。


pd.concat( 
  [df[col].groupby(df[col].isnull().cumsum()).cumprod() for col in df.columns], axis=1) 

    col1   col2 
0    2.0    4.0 
1   12.0   16.0 
2   12.0    NaN 
3   24.0    7.0 
4    NaN   42.0 
5    NaN  336.0 
6    5.0    NaN 
7   40.0    9.0 
8  120.0   18.0 

一种稍微更有效的方法是一次计算石斑鱼掩码并使用zip

m = df.isnull().cumsum() 
 
pd.concat( 
  [df[col].groupby(mask).cumprod() for col, mask in zip(df.columns, m.values.T)], axis=1)