我在数据框中有 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)
