用上面的数据填充空白单元格

时间:2018-11-25 07:05:19

标签: python pandas

我有如下数据:

| ID       | Name      | Inv | Date       | Value | PO  | Type  | Rate  | Tax   | Integ |
|----------|-----------|-----|------------|-------|-----|-------|-------|-------|-------|
| DEADBEEF | CHEMICALS | 321 | 19-11-2017 | 14288 | UK  | State | 0.00% | 3000  | 0     |
|          |           |     |            | 0     | 0   | 0     | 5.00% | 10750 | 537.5 |

生成此库的软件保留了重复数据。在此处看到的空白单元格应该具有在其上方的单元格中看到的数据。

以上数据理想地必须是:

| ID       | Name      | Inv | Date       | Value | PO  | Type  | Rate  | Tax   | Integ |
|----------|-----------|-----|------------|-------|-----|-------|-------|-------|-------|
| DEADBEEF | CHEMICALS | 321 | 19-11-2017 | 14288 | UK  | State | 0.00% | 3000  | 0     |
| DEADBEEF | CHEMICALS | 321 | 19-11-2017 | 14288 | UK  | State | 5.00% | 10750 | 537.5 |

如您所见,第1-7列已填充了上方的数据。我该如何在pandas中做到这一点。

我需要

  • 在“ ID”中标识blanksNULL(第1列)
  • 在该行上方填充数据:第1列到第7列。

1 个答案:

答案 0 :(得分:2)

使用mask向前填充缺失值:

df = df.mask(df == 0).ffill()

或者:

df = df.mask(df.isin(['', 0])).ffill()

如果还希望仅将数字列的第一行中由缺失值填充的行更改为0

num = df.select_dtypes(np.number).columns
d = dict.fromkeys(num, 0)
print (d)
{'Inv': 0, 'Value': 0, 'Tax': 0, 'Integ': 0}

df = df.mask(df == 0).ffill().fillna(d)
print (df)
         ID       Name    Inv        Date    Value  PO   Type   Rate    Tax  \
0  DEADBEEF  CHEMICALS  321.0  19-11-2017  14288.0  UK  State  0.00%   3000   
1  DEADBEEF  CHEMICALS  321.0  19-11-2017  14288.0   0      0  5.00%  10750   

   Integ  
0    0.0  
1  537.5