高级Python pandas重塑

abs*_*urd 4 python reshape dataframe pandas

我认为这与这篇文章类似但不完全一样,我无法理解它.

所以,我目前有一个(非常奇怪的)pandas数据帧,每个单元格中有一个列表,如下所示:

>>> data = pd.DataFrame({'myid' : ['1', '2', '3'],
                         'num' : [['1', '2', '3'], ['1', '2'], []],
                         'text' : [['aa', 'bb', 'cc'], ['cc', 'dd'],
                         []]}).set_index('myid')

>>> print(data)
                num          text
    myid                         
    1     [1, 2, 3]  [aa, bb, cc]
    2        [1, 2]      [cc, dd]
    3            []            []
Run Code Online (Sandbox Code Playgroud)

我想实现这个目标:

  myid num text
0    1   1   aa
0    1   2   bb
0    1   3   cc
1    2   1   cc
1    2   2   dd
2    3         
Run Code Online (Sandbox Code Playgroud)

我如何到达那里?

piR*_*red 6

str.len用来确定嵌入列表/数组的长度.然后使用repeatconcatenate

lens = df.num.str.len()

pd.DataFrame(dict(
        myid=df.myid.repeat(lens),
        num=np.concatenate(df.num),
        text=np.concatenate(df.text)
    )).append(
    pd.DataFrame(
        df.loc[~df.num.astype(bool), 'myid']
    )
).fillna('')

  myid num text
0    1   1   aa
0    1   2   bb
0    1   3   cc
1    2   1   cc
1    2   2   dd
2    3         
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很棒的解决方案! (2认同)