假设我有以下数据框:
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
答案 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