2017-10-13 86 views
0

假如我有以下數據框移一列:Python的大熊貓: - 多列數據框,而不改變其他

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 

是否有大熊貓功能或一個簡單的方法(不創建重複.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

選擇列和應用功能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 
+0

感謝您的快速反應!有沒有辦法做到這一點,而不會「失去」原來的DF?按照你建議的方式,我實際上覆蓋了原來的df。關於.shift()的好處是它具有「臨時」效果,這意味着它不覆蓋原始df。 – mrt

+1

是的,那麼它有點複雜 - 檢查編輯答案。 – jezrael