我试图使用以下代码行转向下表[pd.concat(x)]的结果:
df = pd.concat(x).pivot_table(index=["SECURITY", "DATE"], columns="variable", values="value")
DATE SECURITY value variable
0 2017-02-01 EDH8 COMDTY 98.365 PX_LAST
1 2017-02-02 EDH8 COMDTY 98.37 PX_LAST
2 2017-02-03 EDH8 COMDTY 98.36 PX_LAST
3 2017-02-06 EDH8 COMDTY 98.405 PX_LAST
4 2017-02-07 EDH8 COMDTY 98.41 PX_LAST
5 2017-02-08 EDH8 COMDTY 98.435 PX_LAST
6 2017-02-09 EDH8 COMDTY 98.395 PX_LAST
0 2017-02-01 EDH8 COMDTY 1.00804e+06 OPEN_INT
1 2017-02-02 EDH8 COMDTY 1.00999e+06 OPEN_INT
2 2017-02-03 EDH8 COMDTY 1.01918e+06 OPEN_INT
3 2017-02-06 EDH8 COMDTY 1.02386e+06 OPEN_INT
4 2017-02-07 EDH8 COMDTY 1.02461e+06 OPEN_INT
5 2017-02-08 EDH8 COMDTY 1.04626e+06 OPEN_INT
6 2017-02-09 EDH8 COMDTY 1.05029e+06 OPEN_INT
0 2017-02-01 EDH8 COMDTY 2018-03-19 LAST_TRADEABLE_DT
1 2017-02-02 EDH8 COMDTY 2018-03-19 LAST_TRADEABLE_DT
2 2017-02-03 EDH8 COMDTY 2018-03-19 LAST_TRADEABLE_DT
3 2017-02-06 EDH8 COMDTY 2018-03-19 LAST_TRADEABLE_DT
4 2017-02-07 EDH8 COMDTY 2018-03-19 LAST_TRADEABLE_DT
5 2017-02-08 EDH8 COMDTY 2018-03-19 LAST_TRADEABLE_DT
6 2017-02-09 EDH8 COMDTY 2018-03-19 LAST_TRADEABLE_DT
这会导致以下错误:DataError:无需聚合的数字类型。有任何想法吗?谢谢!
答案 0 :(得分:1)
您可能想要检查value
列的数据类型是否为数字类型,否则(例如字符串/日期)可能会导致默认聚合函数出现问题。在这种情况下,您可能需要显式使用另一个aggfunc
,例如将它们存储到数组中。
根据official document,values : column to aggregate, optional
,aggfunc : function or list of functions, default numpy.mean
。
答案 1 :(得分:1)
你可以选择一个不同的,几乎任意的aggfunc;你只需要一个元素来操作。例如,sum
:
In [37]: df.pivot_table(index=["SECURITY", "DATE"],
columns="variable", values="value",
aggfunc=sum)
Out[37]:
variable LAST_TRADEABLE_DT OPEN_INT PX_LAST
SECURITY DATE
EDH8 COMDTY 2017-02-01 2018-03-19 1.00804e+06 98.365
2017-02-02 2018-03-19 1.00999e+06 98.37
2017-02-03 2018-03-19 1.01918e+06 98.36
2017-02-06 2018-03-19 1.02386e+06 98.405
2017-02-07 2018-03-19 1.02461e+06 98.41
2017-02-08 2018-03-19 1.04626e+06 98.435
2017-02-09 2018-03-19 1.05029e+06 98.395
或min
或max
等。请注意,如果您要混合非数字和数字列,则value
列将为dtype=object
,所以你想要重新数字化(?)结果列,以确保它们被恰当地分类。