首页 > 解决方案 > 使用 pandas 重构数据框

问题描述

我有以下数据框。

a1 = [1,2,3]
a2 = [[[11,'a'],[12, 'b'],[13,'c']], [[21,'a'],[22, 'a']], [[31, 'b']]]

df = pd.DataFrame({'col1': a1,
                   'col2': a2})

   col1                         col2
0     1  [[11, a], [12, b], [13, c]]
1     2           [[21, a], [22, a]]
2     3                    [[31, b]]

我想把它转换成这个数据框

c1   c2    c3
1    11    a
1    12    b
1    13    c
2    21    a
2    22    a
3    31    b

谁能告诉我如何做到这一点。非常感谢。

标签: pandasdataframe

解决方案


用于DataFrame.explode将嵌套列表转换为系列,然后由DataFramecosntructor 创建新列:

df = df.explode('col2').rename(columns={'col1':'c1'}).reset_index(drop=True)
df[['c2','c3']] = pd.DataFrame(df.pop('col2').tolist(), index=df.index)
print (df)
   c1  c2 c3
0   1  11  a
1   1  12  b
2   1  13  c
3   2  21  a
4   2  22  a
5   3  31  b

或者对元组使用带有扁平嵌套列表的列表推导:

L = [(v['col1'], x[0], x[1]) for k, v in df.to_dict('index').items() for x in v['col2']]

df = pd.DataFrame(L, columns=['c1','c2','c3'])
print (df)
   c1  c2 c3
0   1  11  a
1   1  12  b
2   1  13  c
3   2  21  a
4   2  22  a
5   3  31  b

推荐阅读