Python Pandas:多个聚合->值列表

时间:2018-09-06 10:43:57

标签: python pandas dataframe

我有一个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]

执行此操作的正确方法是什么?

谢谢!

2 个答案:

答案 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的论点相同。