代码之家  ›  专栏  ›  技术社区  ›  Evan Zamir

如何在groupby之后聚合熊猫中的向量列?

  •  1
  • Evan Zamir  · 技术社区  · 5 年前

    我有一个pandas数据框,其中包含具有功能的用户(根据TensorFlow单词嵌入计算)。我希望能够按用户分组并计算矢量化特征的平均值或中值:

    嵌入件

    user    features
    bob [-0.030460168, -0.0014596573, 0.0997446, -0.18...
    bob [-0.03197706, 0.015620711, 0.05890667, -0.0402...
    bob [-0.060918115, 0.07939958, 0.0333591, 0.035655...
    mary    [-0.012854534, 0.07733478, 0.12939823, 0.00992...
    mary    [-0.04184026, 0.03382166, 0.1427004, -0.204424...
    

    我试过这样的方法:

    df.groupby('user').agg(count=('user', lambda x: len(x)),
                           mean=('features', lambda x: np.mean(x)))
    

    但它引发了以下错误:

    Exception: Must produce aggregated value
    
    0 回复  |  直到 5 年前
        1
  •  1
  •   Dani Mesejo    5 年前

    问题是 x 是一个pd.Series的numpy.arrays,假设你想要质心,你可以使用 np.vstack 并找到平均值的第一轴:

    安装程序

    import numpy as np
    import pandas as pd
    
    arrays = [np.array([-0.030460168, -0.0014596573, 0.0997446, -0.18]),
              np.array([-0.03197706, 0.015620711, 0.05890667, -0.0402]),
              np.array([-0.060918115, 0.07939958, 0.0333591, 0.035655]),
              np.array([-0.012854534, 0.07733478, 0.12939823, 0.00992]),
              np.array([-0.04184026, 0.03382166, 0.1427004, -0.204424])]
    
    users = ['bob', 'bob', 'bob', 'mary', 'mary']
    
    df = pd.DataFrame(data={'user': users, 'features': arrays})
    

    代码

    result = df.groupby('user').agg(count=('user', lambda x: len(x)),
                           mean=('features', lambda x: np.vstack(x).mean(axis=0).tolist()))
    
    print(result)
    

    输出

          count                                               mean
    user                                                          
    bob       3  [-0.04111844766666667, 0.031186877899999996, 0...
    mary      2  [-0.027347397, 0.055578220000000005, 0.1360493...