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
如果列条件为 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