我有如下数据:
| 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
中做到这一点。
我需要
blanks
或NULL
(第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