【问题标题】:how to apply Functions on numpy arrays using pandas groupby function如何使用 pandas groupby 函数在 numpy 数组上应用函数
【发布时间】:2014-07-16 01:16:24
【问题描述】:

我对 pandas 很陌生,所以我希望这会有一个简单的答案(我也感谢所有指向数据框设置的指针)

假设我有以下 DataFrame:

D = pd.DataFrame({ i:{ "name":str(i),
                       "vector": np.arange(i,i+10),
                       "sq":i**2,
                       "gp":i%3 } for i in range(10) }).T

    gp  name sq  vector
0    0   0   0   [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1    1   1   1   [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2    2   2   4   [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
3    0   3   9   [3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
4    1   4   16  [4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
5    2   5   25  [5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
6    0   6   36  [6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
7    1   7   49  [7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
8    2   8   64  [8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
9    0   9   81  [9, 10, 11, 12, 13, 14, 15, 16, 17, 18]

现在我想按“gp”分组并获得“向量”的平均值

我试过了

D.groupby('gp').mean()

甚至

D.groupby('gp').agg( np.mean )

但我收到一个错误,即没有要聚合的“数字类型”。那么 np.arrays 在 pandas 中不起作用吗?

【问题讨论】:

    标签: python arrays numpy pandas


    【解决方案1】:

    对我来说它有效:

    D.groupby('gp').apply(lambda x: x.vector.mean().mean())
    

    我取平均值两次,因为您想要向量平均值的平均组值(不是吗?)。

    Out[98]: 
    gp
    0     9.0
    1     8.5
    2     9.5
    dtype: float64
    

    如果你想要平均向量,只取平均一次。

    【讨论】:

    • 嗯,不,我实际上想要平均向量(但这是我的问题,我没有问得足够精确)。您的解决方案仍然对我很有效(仅使用一种平均值),所以谢谢。
    【解决方案2】:

    单元格中的数组不是一个好主意,您可以将向量列转换为多列:

    D = pd.DataFrame({ i:{ "name":str(i),
                           "vector": np.arange(i,i+10),
                           "sq":i**2,
                           "gp":i%3 } for i in range(10) }).T
    df = pd.concat([D[["gp", "name", "sq"]], pd.DataFrame(D.vector.tolist(), index=D.index)], axis=1, keys=["attrs", "vector"])
    print df.groupby([("attrs", "gp")]).mean()
    

    这是输出:

                      vector                                                  
                      0    1    2    3    4     5     6     7     8     9
    (attrs, gp)                                                          
    0               4.5  5.5  6.5  7.5  8.5   9.5  10.5  11.5  12.5  13.5
    1               4.0  5.0  6.0  7.0  8.0   9.0  10.0  11.0  12.0  13.0
    2               5.0  6.0  7.0  8.0  9.0  10.0  11.0  12.0  13.0  14.0
    

    【讨论】:

    • 哇,看起来很精致。我想我得消化一会儿。我想这是这些概念之一,起初看起来非常困难,但一旦你理解了它们,就会变得非常有用和pythonic,对吧?好吧,据说我的主要问题更复杂,因为“向量”应该是一个大小相同的 3d 数组,对于我希望将其平均值按不同标准分组在一起的每一行。
    猜你喜欢
    • 2021-06-19
    • 2019-11-17
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 2021-10-04
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多