Pandas根据条件更快地移动多行



我在stackoverflow中看了一些解决方案,但还没有找到适合我的东西

我有一个数据框架:

column_1 | column_2 | column_3 | column_4 | ...
1           nan         1         nan
2            3          4         nan
3           nan         5         nan
...          ...        ...        ...

我想移动column_2为none值的所有行

所以我这样做了:

import math
for index, row in df.iterrows():
if not math.isnan(row["column_2]):
df.iloc[index, :] = df.iloc[index, :].shift()

,它可以工作。这是输出:

column_1 | column_2 | column_3 | column_4 | ...
nan           1         nan         1        # this row changed
2            3          4         nan
nan           3         nan         5        # this row changed
...          ...        ...        ...

问题是它太慢了

是否有一种方法可以更快地实现同样的事情?

仅对已过滤的行使用DataFrame.shiftaxis=1:

m = df["column_2"].isna()
df[m] = df[m].shift(axis=1)
print (df)
column_1  column_2  column_3  column_4
0       NaN       1.0       NaN       1.0
1       2.0       3.0       4.0       NaN
2       NaN       3.0       NaN       5.0

替代解决方案:

df = df.mask(df["column_2"].isna(), df.shift(axis=1))

最新更新