Pandas 数据框 - 如何在分组/聚合操作后保持索引?
这件事本来应该很简单,但我却遇到了一些意想不到的麻烦。下面的代码展示了我如何使用Pandas库进行分组操作,以便按符号计算方差。不幸的是,聚合命令似乎把整数索引给去掉了,所以我想创建一个新的整数列表,把它作为一列添加到表格中,并设置为新的索引。
vardataframe = voldataframe.groupby('Symbol')
vardataframe = vardataframe.aggregate(np.var)
vardataframe['newindex']= np.arange(1,(len(vardataframe)+1))
vardataframe.set_index(['newindex'])
vardataframe = vardataframe.ix[:,['newindex','Symbol','volatility']]
然而,最终的结果是下面这个vardataframe.head()的输出,它没有正确地把表格的索引从符号改回数字。这让我在尝试执行合并命令时遇到了麻烦。
newindex Symbol volatility
Symbol
A 1 NaN 0.000249
AA 2 NaN 0.000413
AAIT 3 NaN 0.000237
AAL 4 NaN 0.001664
AAME 5 NaN 0.001283
正如你所看到的,上面的代码问题在于现在有两个符号列,而且索引没有正确设置。我想做的是去掉第二个符号列,并把newindex设置为新的索引。有人知道我哪里出错了吗?(也许是对ix命令的误解)。非常感谢!
2 个回答
0
与其手动创建一个新的索引,不如直接重置它,使用...
df = df.reset_index()
3
你可以使用 as_index=False
来保留整数索引。只需要一行代码就能完成你想要的操作:
vardataframe = voldataframe.groupby('Symbol', as_index=False).var()
关于你代码中的几个问题:
vardataframe.set_index(['newindex'])
会把 ndewindex
设置为索引,但返回的是一个新的数据框,而你并没有使用这个新数据框。如果你想这样做,可以用 vardataframe.set_index(['newindex'], inplace=True)
。
vardataframe.ix[:,['newindex','Symbol','volatility']]
这会给你一个全是 NaN
的 Symbol
列,因为 Symbol
并不是 vardataframe
的一列,它只存在于索引中。用 ix
查询一个不存在的列会得到全是 NaN
。正如 @user2600939 提到的,你可以用 vardataframe.reset_index(inplace=True)
(或者 vardataframe=vardataframe.reset_index()
)把 Symbol
重新放回作为一列。