将多列列表分解为行

时间:2016-11-02 15:23:31

标签: python pandas

如何将列表分成多行?

我有以下数据框:

df = pd.DataFrame([(1,[1,2,3],['a','b','c']),(2,[4,5,6],['d','e','f']),(3,[7,8],['g','h'])])

我希望得到以下输出:

    0   1   2
0   1   1   a
1   1   2   b
2   1   3   c
3   2   4   d
4   2   5   e
5   2   6   f
6   3   7   g
7   3   8   h

1 个答案:

答案 0 :(得分:2)

您可以使用str.len获取lists的{​​{1}}长度,numpy.repeatflattening lists重复:

from  itertools import chain
import numpy as np

df2 = pd.DataFrame({
        0: np.repeat(df.iloc[:,0].values, df.iloc[:,1].str.len()),
        1: list(chain.from_iterable(df.iloc[:,1])),
        2: list(chain.from_iterable(df.iloc[:,2]))})

print (df2)        
   0  1  2
0  1  1  a
1  1  2  b
2  1  3  c
3  2  4  d
4  2  5  e
5  2  6  f
6  3  7  g
7  3  8  h