2017-10-19 66 views
1

我有此列名稱的數據幀Python的熊貓數據框 - 創建更改列

timestamp,stockname,total volume traded 

有多種股票的名字在每一個時間框架

11:00,A,100 
11:00,B,500 
11:01,A,150 
11:01,B,600 
11:02,A,200 
11:02,B,650 

我想創建一個ChangeInVol塔,每個股票都有自己的差異,如

timestamp, stock,total volume, change in volume 
11:00,A,100,NaN 
11:00,B,500,NAN 
11:01,A,150,50 
11:01,B,600,100 
11:02,A,200,50 
11:03,B,650,50 

如果它是一個單一的股票,我可以hav大功告成

df['ChangeVol'] = df['TotalVol'] - df['TotalVol'].shift(1) 

但也有多個個股

回答

1

極品sort_values + DataFrameGroupBy.diff

#if columns not sorted 
df = df.sort_values(['timestamp','stockname']) 

df['change in volume'] = df.groupby('stockname')['total volume traded'].diff() 
print (df) 
    timestamp stockname total volume traded change in volume 
0  11:00   A     100    NaN 
1  11:00   B     500    NaN 
2  11:01   A     150    50.0 
3  11:01   B     600    100.0 
4  11:02   A     200    50.0 
5  11:02   B     650    50.0 
+0

這是一個時間序列數據,所以排序仍需要時間戳?或者我們可以刪除股票名稱 – Tahseen

+0

我認爲如果'timestamp'排序,那麼'df = df.sort_values(['timestamp','stockname'])'應該省略。 – jezrael

+0

爲什麼不能直接對股票名稱進行排序(省略按排序順序的時間戳)並應用最初建議的內容?我相信@Tahseen在上面評論過同樣的事情。 –

相關問題