我有一个DataFrame,其中包含应用于多个列的多个聚合函数的结果,例如:
bar = pd.DataFrame([
{'a': 1, 'b': 2, 'grp': 0}, {'a': 3, 'b': 8, 'grp': 0},
{'a': 2, 'b': 2, 'grp': 1}, {'a': 4, 'b': 5, 'grp': 1}
])
bar.groupby('grp').agg([np.mean, np.std])
a b
mean std mean std
grp
0 2 1.414214 5.0 4.242641
1 3 1.414214 3.5 2.121320
我想将汇总结果合并到列表(或元组):
grp a b
0 [2, 1.414214] [5.0, 4.242641]
1 [3, 1.414214] [3.5, 2.121320]
执行此操作的正确方法是什么?
谢谢!
答案 0 :(得分:2)
如果,您必须使用列中的列表。你可以
In [60]: bar.groupby('grp').agg(lambda x: [x.mean(), x.std()])
Out[60]:
a b
grp
0 [2.0, 1.4142135623730951] [5.0, 4.242640687119285]
1 [3.0, 1.4142135623730951] [3.5, 2.1213203435596424]
不建议为熊猫存储这样的数据。
答案 1 :(得分:1)
执行此操作的正确方法是什么?
没有否正确的方法。熊猫从来没有被设计成容纳系列/专栏的列表。您可以炮制昂贵的解决方法,但不建议使用这些方法。
不建议使用连续列表的主要原因是,由于与在连续内存块中存储的NumPy数组具有数值系列,您失去了所有矢量化功能。您的系列将是object
dtype,它表示一系列指针。您将失去内存和性能方面的好处。
另请参见What are the advantages of NumPy over regular Python lists?,支持熊猫的论点与针对NumPy的论点相同。