Python 填充一个数据帧,将不同帧的列的值对折并保留索引
我有以下类型的数据帧:Python 填充一个数据帧,将不同帧的列的值对折并保留索引,python,pandas,Python,Pandas,我有以下类型的数据帧: df = pd.DataFrame({'price':[1,2,3,2,2,3,1,2,1], 'quantity':[10,20,30,10,20,30,20,20,10]}) df Out[10]: price quantity 0 1 10 0 2 20 1 3 30 1 2 10 1 4 20 2 3 30 3
df = pd.DataFrame({'price':[1,2,3,2,2,3,1,2,1], 'quantity':[10,20,30,10,20,30,20,20,10]})
df
Out[10]:
price quantity
0 1 10
0 2 20
1 3 30
1 2 10
1 4 20
2 3 30
3 1 20
4 2 20
4 1 10
我想创建第二个日期框,如下所示:
df_bucket = pd.DataFrame(columns=np.arange(0, 5, 1), index=df.index)
0 1 2 3 4
0 NaN 10 20 NaN NaN
1 NaN NaN 10 30 20
2 NaN NaN NaN 30 NaN
3 20 NaN NaN NaN NaN
4 10 20 NaN NaN NaN
我尝试了以下方法,但速度非常慢,只产生了一堆NaN
df_bucket.loc[df.index][df['price']] = df['quantity']
df_bucket
Out[12]:
0 1 2 3 4
0 NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN
我知道我可以在一个for循环中完成这项工作,但我相信这将需要很长时间,你知道有什么更快的方法来完成这项工作吗
为了提供一些上下文,这些是订单簿数据,大部分由唯一的时间戳索引。我想用每个价格级别的列重新组织数据框架,并保留索引,这实际上是一种非常低效但方便的数据组织方式。
数据帧有几十万行,这就是为什么我需要一种比在行上循环更有效的方法
df = pd.DataFrame({'ind':[0,0,1,1,1,2,3,4,4],
'price':[1,2,3,2,2,3,1,2,1],
'quantity':[10,20,30,10,20,30,20,20,10]})
df.pivot_table(index=df.ind,columns='price',values='quantity')
df
输出:
您需要
df.pivot\u表(index=df.index,columns='price',values='quantity')
?
price 1 2 3
ind
0 10.0 20.0 NaN
1 NaN 15.0 30.0
2 NaN NaN 30.0
3 20.0 NaN NaN
4 10.0 20.0 NaN