在groupby之后展开由lambda函数创建的列表

时间:2018-05-24 08:22:25

标签: python pandas group-by

我在通过索引对数据帧进行分组后应用lambda函数。此函数将两个元素添加到原始组。

def fun(x):
    return np.r_[np.repeat(x[:1],2),x,np.repeat(x[:-1],2)]

功能如下:

33    [0.9526133823707408, 0.9526133823707408, 0.952...
14    [0.7399641356312007, 0.7399641356312007, 0.739...
16    [0.9932682467249898, 0.9932682467249898, 0.993...
40    [0.8378176113760183, 0.8378176113760183, 0.837...

然而,它返回每个组的列表,

33    0.952613
33    0.929144
33    0.903109
33    0.876384
33    0.850252
33    1.185296
33    1.155291
33    1.119522
...

我如何展开这些列表,以便列表中的每个元素都显示为一个新行,并带有相应的索引? (就像df的原始结构一样)

我尝试添加.apply(pd.Series)但是将每个元素展开到一个新列中。

原始结构:

{{1}}

1 个答案:

答案 0 :(得分:1)

对每个Series使用numpy array行:

def fun(x):
    return pd.Series(np.r_[np.repeat(x[:1],2),x,np.repeat(x[:-1],2)])

df = df.groupby(df.index).apply(lambda x: fun(x.col))   
print (df)
          0         1         2     ...           21        22        23
33  0.952613  0.952613  0.952613    ...     1.185296  1.155291  1.155291

[1 rows x 24 columns]