如何在Pandas中用真实值除以(前置NA数量+1)回填列值?
实现方法
可以通过以下步骤完成需求:
- 关联真实值到对应区间:先用
bfill()将后续的真实值向前填充到前面的NA位置,再用ffill()兜底处理开头的NA,确保每个位置都能对应到所属区间的真实值。 - 计算区间长度:按填充后的真实值分组,计算每个组的行数(即该真实值需要覆盖的NA数量+1)。
- 生成填充结果:用每个区间的真实值除以对应区间的长度,得到最终填充值。
完整代码如下:
import pandas as pd import numpy as np test_df = pd.DataFrame({'a':[np.nan,np.nan,np.nan,4,np.nan,np.nan,6]}) # 步骤1:关联真实值到对应区间 filled_real = test_df['a'].bfill().ffill() # 步骤2:计算每个组的大小 group_sizes = test_df.groupby(filled_real)['a'].transform('size') # 步骤3:计算并替换结果 test_df['a'] = filled_real / group_sizes print(test_df)
运行后输出:
a 0 1.0 1 1.0 2 1.0 3 1.0 4 2.0 5 2.0 6 2.0
也可以用链式写法简化代码:
test_df['a'] = (test_df['a'].bfill().ffill() / test_df.groupby(test_df['a'].bfill().ffill())['a'].transform('size'))
内容的提问来源于stack exchange,提问作者hengjuice
相关产品推荐
相关产品推荐

