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

如何在其他2个细胞在大熊猫中相等的条件下向前填充na?

如何解决如何在其他2个细胞在大熊猫中相等的条件下向前填充na?

我有一些缺少发票编号的客户交易数据。如果行中两个客户ID相等且交易金额相等,我想用前一行的值填充缺失的发票号。日期并不重要。

数据的示例如下:

 date  customer amount  invoice
01/13    A        10      1
02/13    B        20      2
03/13    B        20      NA
04/13    C        30      3
05/13    C        60      NA
06/13    D        50      4

我想创建的是:

 date  customer amount  invoice
01/13    A        10      1
02/13    B        20      2
03/13    B        20      2
04/13    C        30      3
05/13    C        60      NA      - this NA remains because amount does not match
06/13    D        50      4

解决方法

更新:感谢@David Erickson的评论,为填充添加了特定的列。

您可以使用groupbyffill

df['invoice'] = df.groupby(['customer','amount'])['invoice'].ffill()
,

Emma的答案是这里的解决方案:(df['invoice'] = df.groupby(['customer','amount'])['invoice'].ffill()

但是,如果您在groupby之外无法满足某些条件,那么以下答案可能会很有用,因此我会保留。


您可以将ffill()mask语句一起使用以有条件地填充:

df['invoice'] = df['invoice'].mask(df.duplicated(['customer','amount']),df['invoice'].ffill())
df
Out[1]: 
    date customer  amount  invoice
0  01/13        A      10      1.0
1  02/13        B      20      2.0
2  03/13        B      20      2.0
3  04/13        C      30      3.0
4  05/13        C      60      NaN
5  06/13        D      50      4.0

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