我在通过索引对数据帧进行分组后应用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}}
答案 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]