更改轴 pandas 替换 ffill
Change axis for pandas replace ffill
假设我有一个如下所示的数据框:
df =
0 1 2
0 1.0 2.0 3.0
1 4.0 5.0 NaN
2 6.0 NaN NaN
那么可以用df.fillna(method='ffill', axis=1)
得到:
0 1 2
0 1.0 2.0 3.0
1 4.0 5.0 5.0
2 6.0 6.0 6.0
即我向前填充行。
但是,现在我有一个 -1
而不是 np.nan
的数据框。 Pandas 具有 replace
函数,也可以使用 method='ffill'
,但 replace()
不采用轴参数,因此要获得与上述相同的结果,我会需要打电话给 df.T.replace(-1, method='ffill').T
。由于转置非常昂贵(特别是考虑到我正在处理数 GB 的数据帧),这不是一个选项。我怎样才能达到预期的结果?
您可以在使用 pd.DataFrame.ffill
之前将 -1
值转换为 NaN
:
print(df)
0 1 2
0 1.0 2.0 3.0
1 4.0 5.0 -1.0
2 6.0 -1.0 -1.0
res = df.replace(-1, np.nan)\
.ffill(axis=1)
print(res)
0 1 2
0 1.0 2.0 3.0
1 4.0 5.0 5.0
2 6.0 6.0 6.0
使用mask
和ffill
df.mask(df.eq(-1)).ffill(axis=1)
0 1 2
0 1.0 2.0 3.0
1 4.0 5.0 5.0
2 6.0 6.0 6.0
IIUC,使用 mask
和 ffill
与 axis=1
:
哪里df1 = df.fillna(-1.0)
df1.mask(df1 == -1).ffill(1)
输出:
0 1 2
0 1.0 2.0 3.0
1 4.0 5.0 5.0
2 6.0 6.0 6.0
假设我有一个如下所示的数据框:
df =
0 1 2
0 1.0 2.0 3.0
1 4.0 5.0 NaN
2 6.0 NaN NaN
那么可以用df.fillna(method='ffill', axis=1)
得到:
0 1 2
0 1.0 2.0 3.0
1 4.0 5.0 5.0
2 6.0 6.0 6.0
即我向前填充行。
但是,现在我有一个 -1
而不是 np.nan
的数据框。 Pandas 具有 replace
函数,也可以使用 method='ffill'
,但 replace()
不采用轴参数,因此要获得与上述相同的结果,我会需要打电话给 df.T.replace(-1, method='ffill').T
。由于转置非常昂贵(特别是考虑到我正在处理数 GB 的数据帧),这不是一个选项。我怎样才能达到预期的结果?
您可以在使用 pd.DataFrame.ffill
之前将 -1
值转换为 NaN
:
print(df)
0 1 2
0 1.0 2.0 3.0
1 4.0 5.0 -1.0
2 6.0 -1.0 -1.0
res = df.replace(-1, np.nan)\
.ffill(axis=1)
print(res)
0 1 2
0 1.0 2.0 3.0
1 4.0 5.0 5.0
2 6.0 6.0 6.0
使用mask
和ffill
df.mask(df.eq(-1)).ffill(axis=1)
0 1 2
0 1.0 2.0 3.0
1 4.0 5.0 5.0
2 6.0 6.0 6.0
IIUC,使用 mask
和 ffill
与 axis=1
:
哪里df1 = df.fillna(-1.0)
df1.mask(df1 == -1).ffill(1)
输出:
0 1 2
0 1.0 2.0 3.0
1 4.0 5.0 5.0
2 6.0 6.0 6.0