我有一个熊猫数据框,它由两列组成:一列字符串标识符和一列3-D数组。阵列已按ID分组。如何堆叠每个组的所有阵列,以便每个ID有一个堆叠的阵列?我的代码如下:
df1 = pd.DataFrame({'IDs': ids})
df2 = pd.DataFrame({'arrays':arrays})
df = pd.concat([df1, df2], axis=1)
grouped = df['arrays'].groupby(df['IDs'])
(我尝试了np.dstack(grouped)
,但未成功。)
答案 0 :(得分:0)
我相信这就是您想要的:
df.groupby('IDs')['arrays'].apply(np.dstack).to_frame().reset_index()
它将apply np.dstack(...)
函数用于共享ID的每组数组。
apply()
函数返回一个pd.Series
(以ID作为索引),因此我们然后使用to_frame()
从中创建一个DataFrame,然后使用reset_index()
将ID返回为一列。
(注意:
apply()
的文档讨论了如何使用agg()
来提高效率,但是不幸的是,似乎无法将agg()
与返回ndarray的函数一起使用,例如np.dstack
。在这种情况下,agg()
希望将该数组视为多个对象,而不是一个对象,而是一个序列。。。我的尝试导致了一个异常,内容为“函数不会减少”。)