微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用基于最后差异Pandas的常量总和来转发填充NaN

假设我有一个看起来像的数据帧

internal_id time_id      membership
a           2017-01-01   10
a           2017-02-01   20
a           2017-03-01
a           2017-04-01
b           2017-01-01   10
b           2017-02-01   15
b           2017-03-01
b           2017-04-01
c           2017-01-01   10
c           2017-02-01   12
c           2017-03-01
c           2017-04-01

我想使用每个internal_id的最新差异来转发填充.因此,例如,对于internal_id =’a’,我想转发填充每次添加10.对于’b’,我想每次使用5转发填充.对于’c’,我想每次前进2.所以我的最终df看起来像:

internal_id time_id      membership
a           2017-01-01   10
a           2017-02-01   20
a           2017-03-01   30
a           2017-04-01   40
b           2017-01-01   10
b           2017-02-01   15
b           2017-03-01   20
b           2017-04-01   25
c           2017-01-01   10
c           2017-02-01   12
c           2017-03-01   14
c           2017-04-01   16

我尝试了pd.ffill,但似乎只能使用常量值填充.有没有办法可以用常数总和来填充?

解决方法:

这是一种方法

In [38]: df.assign(membership=df.groupby('internal_id').membership
           .transform(lambda x: x.ffill() + x.diff().shift().ffill().cumsum().fillna(0)))
Out[38]:
   internal_id     time_id  membership
0            a  2017-01-01        10.0
1            a  2017-02-01        20.0
2            a  2017-03-01        30.0
3            a  2017-04-01        40.0
4            b  2017-01-01        10.0
5            b  2017-02-01        15.0
6            b  2017-03-01        20.0
7            b  2017-04-01        25.0
8            c  2017-01-01        10.0
9            c  2017-02-01        12.0
10           c  2017-03-01        14.0
11           c  2017-04-01        16.0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐