我正在尝试在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