numpy.vstack作为pandas groupy中的聚合器

时间:2019-05-09 11:06:51

标签: pandas numpy pandas-groupby

我有一个熊猫数据框:

d = {'group' : [1, 1, 2, 2], 'histogram' : [[1,2,3], [4,5,6], [7,8,9],[10,11,12]]}
df = pd.DataFrame(d)

enter image description here

数据框包含直方图分析的结果。目标是每个组创建2D numpy数组。即

对于组1,2D numpy数组将为np.array([[1,2,3],[4,5,6]])。形状为(3,2)

我尝试了以下操作:

df_test = pd.DataFrame(df.groupby("group").agg({'histogram':'count',
                                             'histogram':lambda x: np.vstack(x)}))

但是我遇到以下错误:

  

例外:必须产生汇总值

我当然可以遍历数据框,按组过滤并使用

np.vstack(df_filtered["histogram"])

但是我想必须有一种更友好的熊猫方式。最终,我将2D数组解析为Keras模型。

1 个答案:

答案 0 :(得分:1)

关闭您需要的内容,将其转换为列表:

df_test = (pd.DataFrame(df.groupby("group")['histogram']
             .agg([('c', 'count'),('2d',lambda x: np.vstack(x).tolist())])))
print (df_test)
       c                         2d
group                              
1      2     [[1, 2, 3], [4, 5, 6]]
2      2  [[7, 8, 9], [10, 11, 12]]

或使用GroupBy.apply

f = lambda x: pd.DataFrame([[len(x), np.vstack(x)]], columns=['c','2d'])
df_test = df.groupby("group")['histogram'].apply(f).reset_index(level=1, drop=True)
print (df_test)
       c                         2d
group                              
1      2     [[1, 2, 3], [4, 5, 6]]
2      2  [[7, 8, 9], [10, 11, 12]]