这应该很容易,但我在这方面度过了一段令人惊讶的恼人时光。下面的代码显示了我执行 Pandas groupby 操作,以便我可以按符号计算方差。不幸的是,聚合命令似乎摆脱了整数索引,因此我尝试创建一个新的整数列表并将其作为一列添加到表中并设置为新索引。
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
正如您所看到的,上述问题现在有两个符号列,并且索引尚未正确设置。我想做的是删除第二个 Symbol 列并使 newindex 作为新索引。有人知道我在这里做错了什么吗? (可能是对 ix 命令的误解)。非常感谢!
最佳答案
您可以使用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
放回原处作为一列。
关于python - Pandas Dataframes - 如何在分组/聚合操作后维护索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24661392/