Pandas - 解包不同长度元组列表的列

clg*_*lg4 7 python group-by pandas iterable-unpacking

我想使用一个名为 Pandas 的数据框df,它有一个 ID 列和一个包含可变数量元组的列表的列表列,所有的元组都具有相同的长度。看起来像这样:

ID  list
1   [(0,1,2,3),(1,2,3,4),(2,3,4,NaN)]
2   [(Nan,1,2,3),(9,2,3,4)]
3   [(Nan,1,2,3),(9,2,3,4),(A,b,9,c),($,*,k,0)]
Run Code Online (Sandbox Code Playgroud)

我想将每个列表解包到列 'A','B','C','D' 中,代表每个元组中的固定位置。

结果应如下所示:

ID  A   B   C   D
1   0   1   2   3
1   1   2   3   4
1   2   3   4   NaN
2   NaN 1   2   3
2   9   2   3   4
3   NaN 1   2   3
3   9   2   3   4
3   A   b   9   c
3   $   *   k   0
Run Code Online (Sandbox Code Playgroud)

我尝试过df.apply(pd.Series(list)但失败了len,因为不同行上的列表元素不同。需要以某种方式解压到列并按 ID 转置?

chr*_*isb 6

In [38]: (df.groupby('ID')['list']
            .apply(lambda x: pd.DataFrame(x.iloc[0], columns=['A', 'B', 'C', 'D']))
            .reset_index())
Out[38]: 
   ID  level_1    A  B  C    D
0   1        0    0  1  2    3
1   1        1    1  2  3    4
2   1        2    2  3  4  NaN
3   2        0  NaN  1  2    3
4   2        1    9  2  3    4
5   3        0  NaN  1  2    3
6   3        1    9  2  3    4
7   3        2    A  b  9    c
8   3        3    $  *  k    0
Run Code Online (Sandbox Code Playgroud)