将pandas.dataframe.pivot_table与非数字、非唯一值一起使用



我正在尝试在pandas.dataframe对象上调用pivot_table函数。这是调用 pivot_table 函数之前的对象示例:

      Bid     Symb     Ask      DateTime
 0    201000  ESU6     201050   2016-06-19 18:59:58.337134544-05:00
 1    201025  ESU6     201075   2016-06-19 18:59:58.337134544-05:00
 2    201000  ESU6     201025   2016-06-19 18:59:59.611987128-05:00
 3    200975  ESU6     201025   2016-06-19 18:59:59.995825670-05:00

如您所见,"日期时间"列中有一个重复的值。我想调用pivot_table函数result = object.pivot_table(columns='Symb', values=['Bid','Ask','DateTime'], index=result.index)以便获得以下数据帧对象作为结果:

          Bid     Ask     DateTime
 Symb     ESU6    ESU6    ESU6
 0        201000  201050  2016-06-19 18:59:58.337134544-05:00
 1        201025  201075  2016-06-19 18:59:58.337134544-05:00
 2        201000  201025  2016-06-19 18:59:59.611987128-05:00
 3        200975  201025  2016-06-19 18:59:59.995825670-05:00

但是,DateTime 具有非数字值,因此不会合并到 pivot_table 函数的输出中。最终,我想得到这个作为最终结果:

                                      Bid.ESU6  Ask.ESU6
 DateTime
 2016-06-19 18:59:58.337134544-05:00  201000    201050
 2016-06-19 18:59:58.337134544-05:00  201025    201075
 2016-06-19 18:59:59.611987120-05:00  201000    201025
 2016-06-19 18:59:59.995825670-05:00  200975    201025

[注意:问题是pivot_table首先不允许非唯一索引(或者更确切地说,它会截断数据,使索引是唯一的),所以我不能只调用result = object.pivot_table(columns='Symb', values=['Bid','Ask'], index=object['DateTime'])。此外,如果我保留整数作为索引,它将不允许我简单地调用result = object.pivot_table(columns='Symb', values=['Bid','Ask','DateTime'], index=object.index),因为 DateTime 列由非数字值组成,导致pivot_table结果仅排除 DateTime 列。另一种解决方法是将 DateTime 转换为表示日期时间的数值,然后转换回来,但这需要大量资源并且花费太多时间,因为我的数据帧对象有 100,000+ 行。

提前感谢您的帮助!

您可以在按列 DateTime 的值进行透视后简单地设置新index

result = object.pivot_table(columns='Symb', values=['Bid','Ask'], index=object.index)
result.index = object.DateTime
#remove Multiindex in columns
result.columns = ['.'.join(col) for col in result.columns]
print (result)
                                     Bid.ESU6  Ask.ESU6
DateTime                                               
2016-06-19 18:59:58.337134544-05:00    201000    201050
2016-06-19 18:59:58.337134544-05:00    201025    201075
2016-06-19 18:59:59.611987128-05:00    201000    201025
2016-06-19 18:59:59.995825670-05:00    200975    201025

相关内容

  • 没有找到相关文章

最新更新