Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python数据框架-创建更改列_Python_Pandas_Dataframe - Fatal编程技术网

Python数据框架-创建更改列

Python数据框架-创建更改列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个具有此列名的数据框 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,

我有一个具有此列名的数据框

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
如果它是一只股票的话,我本可以做到的

df['ChangeVol'] = df['TotalVol'] - df['TotalVol'].shift(1)
但有多种股票

需要+:


它是一个时间序列数据,所以仍然需要对时间戳进行排序吗?或者我们可以取消对股票名称的排序我认为如果对
timestamp
进行排序,那么
df=df.sort_值(['timestamp','stockname'])
应该省略。为什么不能只对股票名称排序(在排序顺序中省略时间戳)并应用最初建议的内容呢?我相信@Tahsee已经对上述内容进行了评论。@SameerMahajan-输出将不同,试试看。@jezrael timestamp是索引。在执行group by和performance diff()操作之后,如何对索引进行排序?我们会使用df.index代替“timestamp”吗?
#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