【问题标题】:pandas filling nan with previous row value multiplied with another columnpandas 用前一行值填充 nan 乘以另一列
【发布时间】:2020-08-29 16:41:55
【问题描述】:

我有一个数据框,我想用之前行中的值与 pct_change 列相乘来填充 nan

    col_to_fill       pct_change
0       1                NaN
1       2                1.0
2       10               0.5
3       nan              0.5
4       nan              1.3
5       nan              2
6       5                3

所以对于3rd row 10*0.5 = 5 并使用该填充值来填充下一行(如果它是 nan)。

    col_to_fill        pct_change
0       1                NaN
1       2                1.0
2       10               0.5
3       5                0.5
4       6.5              1.3
5       13               2
6       5                3

我用过这个

while df['col_to_fill'].isna().sum() > 0:
    df.loc[df['col_to_fill'].isna(), 'col_to_fill'] = df['col_to_fill'].shift(1) * df['pct_change']

但是它花费了太多时间,因为它只在一个循环中填充了前一行是 nonnan 的那些行。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    ffill 之后尝试cumprod

    s = df.col_to_fill.ffill()*df.loc[df.col_to_fill.isna(),'pct_change'].cumprod()
    df.col_to_fill.fillna(s, inplace=True)
    df
    Out[90]: 
       col_to_fill  pct_change
    0          1.0         NaN
    1          2.0         1.0
    2         10.0         0.5
    3          5.0         0.5
    4          6.5         1.3
    5         13.0         2.0
    6          5.0         3.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-30
      • 2021-01-24
      • 2020-09-14
      • 2022-07-22
      • 1970-01-01
      • 2017-12-28
      • 2021-10-01
      • 2020-10-08
      相关资源
      最近更新 更多