为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

开满天机 2022-06-14 17:40:26
我对此有点麻烦。我的数据框如下所示:id    amount    dummy1      130        01      120        01      110        11      nan       nan 1      nan       nan   2      nan        02      50         02      20         12      nan       nan 2      nan       nan  所以,我需要做的是,在 dummy 获得 value = 1 之后,我需要为每个变量填充零id,如下所示:id    amount    dummy1      130        01      120        01      110        11       0        nan 1       0        nan   2      nan        02      50         02      20         12       0        nan 2       0        nan 我猜我需要一些groupby('id'), fillna(method='ffill'), 也许 a.loc或 a 的组合shift(),但是我尝试的所有东西都有一些问题或者很慢。有什么建议么?
查看完整描述

4 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

我将使用的方式

s = df.groupby('id')['dummy'].ffill().eq(1)
df.loc[s&df.dummy.isna(),'amount']=0


查看完整回答
反对 回复 2022-06-14
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

你可以更容易地做到这一点:

data[data['dummy'].isna()]['amount'] = 0

这将选择 dummy 为 nan 的所有行,并用 0 填充金额列。


查看完整回答
反对 回复 2022-06-14
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

IIUC,ffill()并掩盖静南:


s = df.groupby('id')['amount'].ffill().notnull()

df.loc[df['amount'].isna() & s, 'amount'] = 0

输出:


   id  amount  dummy

0   1   130.0    0.0

1   1   120.0    0.0

2   1   110.0    1.0

3   1     0.0    NaN

4   1     0.0    NaN

5   2     NaN    0.0

6   2    50.0    0.0

7   2    20.0    1.0

8   2     0.0    NaN

9   2     0.0    NaN


查看完整回答
反对 回复 2022-06-14
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

请您尝试以下操作。


df.loc[df['dummy'].isnull(),'amount']=0

df

输出如下。


    id  amount  dummy

0   1   130.0   0.0

1   1   120.0   0.0

2   1   110.0   1.0

3   1   0.0     NaN

4   1   0.0     NaN

5   2   NaN     0.0

6   2   50.0    0.0

7   2   20.0    1.0

8   2   0.0     NaN

9   2   0.0     NaN


查看完整回答
反对 回复 2022-06-14
  • 4 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信