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

每组第一次观察后 Groupby 用 0 填充

每组第一次观察后 Groupby 用 0 填充

小怪兽爱吃肉 2023-10-18 21:19:48
问题有没有办法使用 groupby 用 0 填充缺失值,但仅在观察第一次出现之后?例如开始       id   spiq  nopiq   spiq  pstkq  dvy  dvpq  mibq  xidoq   miiq2014    1   NaN   NaN     NaN   0.0   NaN   0.0   0.0 -0.122  0.0002015    1   0.01  0.003   0.1   0.10  NaN   NaN   NaN -1.309  0.0002016    1   0.04  0.003   NaN   0.10  NaN   0.10  0.10  NaN   NaN2017    1   NaN   0.000   NaN   NaN   20    NaN   NaN  0.000  NaN2018    1   0.05  0.000   NaN   0.0   NaN   0.0   0.0  0.000  0.0002014    2   NaN   NaN     NaN   0.0   NaN   0.0   0.0 -0.122  0.0002015    2   0.01  0.003   0.1   0.10  NaN   NaN   NaN -1.309  0.0002016    2   0.04  0.003   NaN   0.10  NaN   0.10  0.10  NaN   NaN2017    2   NaN   0.000   NaN   NaN   20    NaN   NaN  0.000  NaN2018    2   0.05  0.000   NaN   0.0   NaN   0.0   0.0  0.000  0.0002014    3   NaN   NaN     NaN   0.0   NaN   0.0   0.0 -0.122  0.0002015    3   0.01  0.003   0.1   0.10  NaN   NaN   NaN -1.309  0.0002016    3   0.04  0.003   NaN   0.10  NaN   0.10  0.10  NaN   NaN2017    3   NaN   0.000   NaN   NaN   20    NaN   NaN  0.000  NaN2018    3   0.05  0.000   NaN   0.0   NaN   0.0   0.0  0.000  0.000期望的    id   spiq  nopiq   spiq  pstkq  dvy  dvpq  mibq  xidoq   miiq2014    1   NaN   NaN     NaN   0.0   NaN   0.0   0.0  -0.122  0.0002015    1   0.01  0.003   0.1   0.10  NaN   0.0   0.0  -1.309  0.0002016    1   0.04  0.003   0.0   0.10  NaN   0.10  0.10  0.0    0.02017    1   0.0   0.000   0.0   0.0   20    0.0   0.0   0.0    0.02018    1   0.05  0.000   0.0   0.0   0.0   0.0   0.0   0.0    0.0002014    2   NaN   NaN     NaN   0.0   NaN   0.0   0.0  -0.122  0.0002015    2   0.01  0.003   0.1   0.10  NaN   0.0   0.0  -1.309  0.0002016    2   0.04  0.003   0.0   0.10  NaN   0.10  0.10  0.0    0.02017    2   0.0   0.000   0.0   0.0   20    0.0   0.0   0.000  0.02018    2   0.05  0.000   0.0   0.0   0.0   0.0   0.0   0.000  0.0002014    3   NaN   NaN     NaN   0.0   NaN   0.0   0.0  -0.122  0.000
查看完整描述

1 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

IIUC,这是一种方法,因为您不能向前填充零。


df.mask((df.groupby('id').ffill().notna() & 

         df.isna()).fillna(False), 0)

输出:


      id  spiq  nopiq  spiq.1  pstkq   dvy  dvpq  mibq  xidoq  miiq

2014   1   NaN    NaN     NaN    0.0   NaN   0.0   0.0 -0.122   0.0

2015   1  0.01  0.003     0.1    0.1   NaN   0.0   0.0 -1.309   0.0

2016   1  0.04  0.003     0.0    0.1   NaN   0.1   0.1  0.000   0.0

2017   1  0.00  0.000     0.0    0.0  20.0   0.0   0.0  0.000   0.0

2018   1  0.05  0.000     0.0    0.0   0.0   0.0   0.0  0.000   0.0

2014   2   NaN    NaN     NaN    0.0   NaN   0.0   0.0 -0.122   0.0

2015   2  0.01  0.003     0.1    0.1   NaN   0.0   0.0 -1.309   0.0

2016   2  0.04  0.003     0.0    0.1   NaN   0.1   0.1  0.000   0.0

2017   2  0.00  0.000     0.0    0.0  20.0   0.0   0.0  0.000   0.0

2018   2  0.05  0.000     0.0    0.0   0.0   0.0   0.0  0.000   0.0

2014   3   NaN    NaN     NaN    0.0   NaN   0.0   0.0 -0.122   0.0

2015   3  0.01  0.003     0.1    0.1   NaN   0.0   0.0 -1.309   0.0

2016   3  0.04  0.003     0.0    0.1   NaN   0.1   0.1  0.000   0.0

2017   3  0.00  0.000     0.0    0.0  20.0   0.0   0.0  0.000   0.0

2018   3  0.05  0.000     0.0    0.0   0.0   0.0   0.0  0.000   0.0

细节:


使用ffillaftergroupby用每个组的最后一个有效值填充 NaN,然后检查新创建的数据帧以查看原始 df 中所有非 NaN 值和 NaN 值的位置,并使用 0 填充它们mask。


查看完整回答
反对 回复 2023-10-18
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

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