我正在阅读一些csv文件,这些文件没有很好地设计到数据框中,并且一个属性,是/否,可以出现在Col_B或Col_C中,具体取决于是否存在的颜色属性< / p>
导入CSV后,数据框如下所示
Col_A Col_B Col_C Col_D
0 One Yes True NaN
1 One Yes True NaN
2 One Black Yes True
3 One Black Yes True
4 One Yes True NaN
5 One Yes True NaN
对于Col_B之后的所有列,我需要将第2行和第3行的值向左移动一列,因此最终结果如下所示: (我简化了此示例的csv布局)
Col_A Col_B Col_C Col_D
0 One Yes True NaN
1 One Yes True NaN
2 One Yes True Nan
3 One Yes True Nan
4 One Yes True NaN
5 One Yes True NaN
然后我可以删除Col_D
答案 0 :(得分:1)
您可以使用boolean indexing
按notnull
找到所有转移的索引,然后在列中交换值:
idx = df.index[df['Col_D'].notnull()]
df.loc[idx, ['Col_B','Col_C']] = df.loc[idx, ['Col_C','Col_D']].values
df = df.drop('Col_D', axis=1)
print (df)
Col_A Col_B Col_C
0 One Yes True
1 One Yes True
2 One Yes True
3 One Yes True
4 One Yes True
5 One Yes True
cols = ['Col_B','Col_C','Col_D']
idx = df.index[df['Col_D'].notnull()]
df.loc[idx, cols] = df.loc[idx, cols].shift(-1, axis=1)
df = df.drop('Col_D', axis=1)
print (df)
Col_A Col_B Col_C
0 One Yes True
1 One Yes True
2 One Yes True
3 One Yes True
4 One Yes True
5 One Yes True