更新: 通用矢量化方法-也适用于多列DF:
假设我们有以下DF:
In [159]: dfOut[159]: a b c0 1 [1, 2] 51 2 [2, 3, 4] 62 3 [5] 7
解:
In [160]: lst_col = 'b'In [161]: pd.Dataframe({ ...: col:np.repeat(df[col].values, df[lst_col].str.len()) ...: for col in df.columns.difference([lst_col]) ...: }).assign(**{lst_col:np.concatenate(df[lst_col].values)})[df.columns.tolist()] ...:Out[161]: a b c0 1 1 51 1 2 52 2 2 63 2 3 64 2 4 65 3 5 7设定:
df = pd.Dataframe({ "a" : [1,2,3], "b" : [[1,2],[2,3,4],[5]], "c" : [5,6,7]})向量化NumPy方法:
In [124]: pd.Dataframe({'a':np.repeat(df.a.values, df.b.str.len()), 'b':np.concatenate(df.b.values)})Out[124]: a b0 1 11 1 22 2 23 2 34 2 45 3 5旧答案:
尝试这个:
In [89]: df.set_index('a', append=True).b.apply(pd.Series).stack().reset_index(level=[0, 2], drop=True).reset_index()Out[89]: a 00 1 1.01 1 2.02 2 2.03 2 3.04 2 4.05 3 5.0或@Boud提供的更好的解决方案:
In [110]: df.set_index('a').b.apply(pd.Series).stack().reset_index(level=-1, drop=True).astype(int).reset_index()Out[110]: a 00 1 11 1 22 2 23 2 34 2 45 3 5


