2017-10-19 80 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在上面评论过同样的事情。 –