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