Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在数据帧中填充NaN的快速方法_Python_Pandas - Fatal编程技术网

Python 在数据帧中填充NaN的快速方法

Python 在数据帧中填充NaN的快速方法,python,pandas,Python,Pandas,我有DataFrame对象df,列如下: [In]: df [Out]: id sum 0 1 NaN 1 1 NaN 2 1 2 3 1 NaN 4 1 4 5

我有
DataFrame
对象
df
,列如下:

[In]: df
[Out]:
                 id            sum
0                 1            NaN
1                 1            NaN
2                 1              2
3                 1            NaN
4                 1              4
5                 1            NaN
6                 2            NaN
7                 2            NaN
8                 2              3
9                 2            NaN
10                2              8
10                2            NaN
...             ...            ...
[1810601 rows x 2 columns]
[In]: df
[Out]:
                 id            sum
0                 1              0
1                 1              0
2                 1              2
3                 1              2
4                 1              4
5                 1              4
6                 2              0
7                 2              0
8                 2              3
9                 2              3
10                2              8
10                2              8
...             ...            ...
[1810601 rows x 2 columns]
我的列中有很多a
NaN
值,我想用以下方式填充这些值:

  • 如果
    NaN
    在开头(对于第一个
    index
    per
    id
    等于
    0
    ),那么它应该是
    0
  • 否则,如果
    NaN
    我想从相同
    id的上一个索引中获取值
输出应如下所示:

[In]: df
[Out]:
                 id            sum
0                 1            NaN
1                 1            NaN
2                 1              2
3                 1            NaN
4                 1              4
5                 1            NaN
6                 2            NaN
7                 2            NaN
8                 2              3
9                 2            NaN
10                2              8
10                2            NaN
...             ...            ...
[1810601 rows x 2 columns]
[In]: df
[Out]:
                 id            sum
0                 1              0
1                 1              0
2                 1              2
3                 1              2
4                 1              4
5                 1              4
6                 2              0
7                 2              0
8                 2              3
9                 2              3
10                2              8
10                2              8
...             ...            ...
[1810601 rows x 2 columns]

我尝试使用带有
iterrows()
的循环“一步一步”地完成它,但这是一种非常无效的方法。我相信使用pandas方法可以更快地完成此任务

尝试groupby建议的ffill

df['sum'] = df.groupby('id')['sum'].ffill().fillna(0)

按照groupby的建议尝试使用ffill

df['sum'] = df.groupby('id')['sum'].ffill().fillna(0)

熊猫有这样的功能!看一看熊猫.DataFrame.fillna
。但是对于那个特定的条件,我如何使用熊猫.DataFrame.fillna?@Justin
fillna
将不支持条件填充熊猫有一个功能!请看一下熊猫.DataFrame.fillna。但是如何使用熊猫.DataFrame.fillna来满足特定条件?@Justin
fillna
将不支持条件填充