Python 如何向前填充na';在大熊猫体内,其他两个细胞的情况相同吗?

Python 如何向前填充na';在大熊猫体内,其他两个细胞的情况相同吗?,python,pandas,missing-data,Python,Pandas,Missing Data,我有一些发票号码缺失的客户交易数据。如果两行中的客户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

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

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

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

您可以使用
groupby
ffill

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

不错。我应该意识到
ffill()
可以在groupy上工作。但是,我认为您需要这样做:
df['invoice']=df.groupby(['customer','amount'])['invoice'].ffill()