【问题标题】:Pandas Dataframes - How do you maintain an index post a group by/aggregation operation?Pandas Dataframes - 如何在分组/聚合操作后维护索引?
【发布时间】:2014-08-30 22:25:07
【问题描述】:

这应该很容易,但我在这方面遇到了令人惊讶的烦人时间。下面的代码显示了我执行 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 命令的误解)。非常感谢!

【问题讨论】:

标签: python pandas dataframe


【解决方案1】:

您可以使用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 的列,而仅存在于其index 中。使用ix 查询不存在的列会得到所有NaN。正如@user2600939 提到的,您可以使用vardataframe.reset_index(inplace=True)(或vardataframe=vardataframe.reset_index()Symbol 作为一列放回。

【讨论】:

    【解决方案2】:

    与其手动创建新索引,不如将其重置使用...

    df = df.reset_index()
    

    【讨论】:

      猜你喜欢
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多