Python:多列dataframe-在不更改另一列的情况下移动一列

Python:多列dataframe-在不更改另一列的情况下移动一列,python,pandas,dataframe,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函数或一种不创建重复的简单方法。复制数据帧允许我返回相同的数据帧,但有一个或多个列,例如Col2和Col3,移动一行,即shift1,而不覆盖它 换句话说,要得到以下信息 df = Index

假设我有以下数据帧:

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函数或一种不创建重复的简单方法。复制数据帧允许我返回相同的数据帧,但有一个或多个列,例如Col2和Col3,移动一行,即shift1,而不覆盖它

换句话说,要得到以下信息

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

按子集选择列并应用函数移位:

编辑:


谢谢你的快速回复!有没有一种方法可以在不丢失原始df的情况下执行此操作?按照您建议的方式,我实际上覆盖了原始df。关于.shift的好处是它有一个临时效果,这意味着它不会覆盖原始的df。是的,那么它有点复杂-检查editeda答案。
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