如何使用pandas将列数据移到一列

时间:2017-06-25 10:40:38

标签: python-2.7 pandas

我正在阅读一些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

1 个答案:

答案 0 :(得分:1)

您可以使用boolean indexingnotnull找到所有转移的索引,然后在列中交换值:

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

使用shift的另一个解决方案,最后按drop删除列:

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