我如何在大Pandas体内的其他两个细胞相等的情况下向前填充na?

2024-04-25 21:20:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些发票号码缺失的客户交易数据。如果两行中的客户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

Tags: 数据id示例date客户交易发票invoice
2条回答

更新:感谢@David Erickson的评论,为ffill添加一个特定的专栏

您可以使用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

相关问题 更多 >