在熊猫中满足条件后按组前向填充缺失值

我对此有点麻烦。我的数据框如下所示:


id    amount    dummy

1      130        0

1      120        0

1      110        1

1      nan       nan 

1      nan       nan   

2      nan        0

2      50         0

2      20         1

2      nan       nan 

2      nan       nan  

所以,我需要做的是,在 dummy 获得 value = 1 之后,我需要为每个变量填充零id,如下所示:


id    amount    dummy

1      130        0

1      120        0

1      110        1

1       0        nan 

1       0        nan   

2      nan        0

2      50         0

2      20         1

2       0        nan 

2       0        nan 

我猜我需要一些groupby('id'), fillna(method='ffill'), 也许 a.loc或 a 的组合shift(),但是我尝试的所有东西都有一些问题或者很慢。有什么建议么?


开满天机
浏览 137回答 4
4回答

哈士奇WWW

我将使用的方式s = df.groupby('id')['dummy'].ffill().eq(1) df.loc[s&df.dummy.isna(),'amount']=0

杨__羊羊

你可以更容易地做到这一点:data[data['dummy'].isna()]['amount'] = 0这将选择 dummy 为 nan 的所有行,并用 0 填充金额列。

ABOUTYOU

IIUC,ffill()并掩盖静南:s = df.groupby('id')['amount'].ffill().notnull()df.loc[df['amount'].isna() & s, 'amount'] = 0输出:   id  amount  dummy0   1   130.0    0.01   1   120.0    0.02   1   110.0    1.03   1     0.0    NaN4   1     0.0    NaN5   2     NaN    0.06   2    50.0    0.07   2    20.0    1.08   2     0.0    NaN9   2     0.0    NaN

小唯快跑啊

请您尝试以下操作。df.loc[df['dummy'].isnull(),'amount']=0df输出如下。    id  amount  dummy0   1   130.0   0.01   1   120.0   0.02   1   110.0   1.03   1   0.0     NaN4   1   0.0     NaN5   2   NaN     0.06   2   50.0    0.07   2   20.0    1.08   2   0.0     NaN9   2   0.0     NaN
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python