基于给定特定值的前一行值更改行值

2024-04-26 05:52:23 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的循环中,我想将任何None值更改为前一行的值。我当前的代码是这样做的,但是如果一行中有2个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和DataNearrow,使用以下代码很有效:

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      |
+-------------+------------+-----------+

Tags: 代码innoneforindexifshiftat