Python 如何向前填充na';在大熊猫体内,其他两个细胞的情况相同吗?
我有一些发票号码缺失的客户交易数据。如果两行中的客户id相等且交易金额相等,我想用前一行的值填充缺少的发票号。日期并不重要 数据外观的一个示例是: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
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()