Python pandas:多列数据帧 - 移动一列而不更改另一列

时间:2017-10-13 12:12:58

标签: python pandas dataframe

假设我有以下数据框:

df = 

Index Col1 Col2 Col3 Col4
0     10   20   30   40
1     11   21   31   41
2     12   22   32   42
3     13   23   33   43

是否有一个pandas函数或一个简单的方法(没有创建重复的.copy()数据帧),这将允许我返回相同的数据帧,但有一个或多个列(例如Col2& Col3)移位一行,即.shift(1)没有覆盖它?

换句话说,得到以下

df = 

Index Col1 Col2 Col3 Col4
0     10   nan  nan  40
1     11   20   30   41
2     12   21   31   42
3     13   22   32   43

1 个答案:

答案 0 :(得分:1)

按子集选择列并应用函数shift

cols = ['Col2','Col3']
df[cols] = df[cols].shift(1)
print (df)
       Col1  Col2  Col3  Col4
Index                        
0        10   NaN   NaN    40
1        11  20.0  30.0    41
2        12  21.0  31.0    42
3        13  22.0  32.0    43

编辑:

cols = ['Col2','Col3']
another_cols = df.columns.difference(cols)

df1 = df[another_cols].combine_first(df[cols].shift(1))
print (df1)
       Col1  Col2  Col3  Col4
Index                        
0        10   NaN   NaN    40
1        11  20.0  30.0    41
2        12  21.0  31.0    42
3        13  22.0  32.0    43