代码之家  ›  专栏  ›  技术社区  ›  yatu Sayali Sonawane

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

  •  1
  • yatu Sayali Sonawane  · 技术社区  · 6 年前

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

    df.groupby(df.index).apply(lambda x: fun(x.col))    
    

    其中函数为:

    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...
    

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

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

    原始结构:

    33    0.952613
    33    0.929144
    33    0.903109
    33    0.876384
    33    0.850252
    33    1.185296
    33    1.155291
    33    1.119522
    ...
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   jezrael    6 年前

    使用 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]