pandas shift on condition of a column isnull 但它删除了前两列

pandas shift on condition of a column isnull but it removes the first two columns

如果列条件为 NaN,我会遇到基于列条件移动整行的问题。 如果第 10 列为 NaN,则将整行第 3 单元格向右移动。

初始数据帧:

   6   7   8   9   10  11  12
0  2   1   12  3   2   12  4
1  6   2   4   7   NaN NaN NaN
2  4   1   4   3   6   3   2
3  NaN NaN NaN 4   5   3   2
4  3   1   3   2   1   2   6
5  5   2   6   1   NaN NaN NaN
6  NaN NaN NaN 4   5   3   2

我想到了这个解决方案,但是前两列不知何故不见了。

df1_copy[df1_copy[10].isnull()] = df1_copy[df1_copy[10].isnull()].shift(3, axis=1)

结果:

   6   7   8   9   10  11  12
0  2   1   12  3   2   12  4
1  NaN NaN NaN NaN NaN 4   7
2  4   1   4   3   6   3   2
3  NaN NaN NaN 4   5   3   2
4  3   1   3   2   1   2   6
5  NaN NaN NaN NaN NaN 6   1
6  NaN NaN NaN 4   5   3   2

预计:

   6   7   8   9   10  11  12
0  2   1   12  3   2   12  4
1  NaN NaN NaN 6   2   4   7
2  4   1   4   3   6   3   2
3  NaN NaN NaN 4   5   3   2
4  3   1   3   2   1   2   6
5  NaN NaN NaN 5   2   6   1
6  NaN NaN NaN 4   5   3   2

虽然我之前针对其他情况也尝试过类似的方法并且有效,但它似乎不适用于这个。任何帮助将不胜感激,谢谢。 here is the csv

原来我使用的 Pandas 版本太旧而且它在 shift 函数中有一个错误,我想出了这个解决方法。虽然它不优雅但它有效。希望有人能提供更好的东西。 我最后只是重新排列了列的顺序。

df_shift3 = df1_copy1.loc[df1_copy1.loc[:,10].isnull()][[10, 11, 12, 6, 7, 8, 9]]
df_shift3.columns = [6, 7, 8, 9, 10, 11, 12]
df1_copy1[df1_copy1.loc[:,10].isnull()] = df_shift3