我有一个像
这样的数据框df = pd.DataFrame({'a':[np.array([5,6]),6,np.array([8,10]),7],'b':[np.array([7,8]),9,np.array([15,10]),7]},index=[0,0,1,1])
a b 0 [5, 6] [7, 8] 0 6 9 1 [8, 10] [15, 10] 1 7 7
当我尝试groupby
df.groupby(level=0).apply(lambda x: pd.Series(x.values.flatten()))
0 1 2 3 0 [5, 6] [7, 8] 6 9 1 [8, 10] [15, 10] 7 7
那么如何以这样的方式使用apply我最终在相同的列下展平具有相似索引的单元格。
a b 0 [5, 6,6] [7, 8,9] 1 [8, 10,7] [15, 10,7]
答案 0 :(得分:2)
这是numpy.hstack
的工作。但是,当值是多维的时,将groupby的输出转换为数据帧总是有点棘手。将东西装入系列通常有效:
df.groupby(level=0).apply(lambda g: pd.Series({
'a': np.hstack(g['a'].values),
'b': np.hstack(g['b'].values)
}))
当然,列举字典会更好......
对于n
列,dict理解会更好,即
df.groupby(level=0).apply(lambda g: pd.Series({i: np.hstack(g[i].values) for i in df.columns}))