根据给定值的前一个行值更改行值

时间:2019-07-25 08:35:38

标签: python pandas

在以下循环中,我想将任何None值更改为上一行的值。我目前的代码可以做到这一点,但是如果连续有两个None,它将仅更改第一个。

我目前使用.shift()将上一行的值作为新列,称为identifierOld,当只需要更改1个None值时该方法起作用,但是有通常连续超过1个,这意味着我的代码无法正常工作。

for i in indexTest6.index:
    if indexTest6.at[i, 'identifier'] == "None":
        indexTest6.at[i, 'identifier'] = indexTest6.at[i, 'identifierOld']

当前输出:

+---------------------+------------+-----------+---------------+
|     requestTime     | identifier | assetType | identifierOld |
+---------------------+------------+-----------+---------------+
| 01/04/2019 01:18:21 | 4444       | issn      | None          |
| 01/04/2019 01:18:21 | 4444       |           | 4444          |
| 01/04/2019 01:18:22 | None       | None      | None          |
| 01/04/2019 01:18:22 | None       | None      | None          |
+---------------------+------------+-----------+---------------+

所需的输出:

+---------------------+------------+------------------+---------------+
|     requestTime     | identifier |    assetType     | identifierOld |
+---------------------+------------+------------------+---------------+
| 01/04/2019 01:18:21 |   4444     | issn             | None          |
| 01/04/2019 01:18:21 |   4444     |                  | 4444          |
| 01/04/2019 01:18:22 |   4444     | None             | 4444          |
| 01/04/2019 01:18:22 |   4444     | None             | 4444          |
+---------------------+------------+------------------+---------------+

(理想情况下,我希望无需附加列即可完成此操作。)

编辑: 感谢anky和datanovice,使用下面的代码可以工作了:

indexTest6["identifier"] = indexTest6["identifier"].fillna(method='ffill')

+-------------+------------+-----------+
| requestTime | identifier | assetType |
+-------------+------------+-----------+
| 18:21.2     |   44444443 | issn      |
| 18:21.2     |   44444443 |           |
| 18:21.9     |   44444443 | None      |
| 18:22.1     |   44444443 | None      |
+-------------+------------+-----------+

0 个答案:

没有答案