我有一个熊猫数据框:
d = {'group' : [1, 1, 2, 2], 'histogram' : [[1,2,3], [4,5,6], [7,8,9],[10,11,12]]}
df = pd.DataFrame(d)
数据框包含直方图分析的结果。目标是每个组创建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模型。
答案 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]]