如何在pandas中展平具有相似索引的行?

时间:2017-10-05 10:26:29

标签: python pandas numpy

我有一个像

这样的数据框
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]

1 个答案:

答案 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}))