pandas - 使用 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
谁能告诉我如何做到这一点。非常感谢。
解决方案
用于DataFrame.explode
将嵌套列表转换为系列,然后由DataFrame
cosntructor 创建新列:
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
推荐阅读
- reactjs - 从 React-native cameraRoll 库中检索视频的 fileSize 和 playableDuration
- r - 如何滚动固定长度向量的顺序
- powershell - 在没有管理员权限的情况下允许来自 PowerShell 的 SSH
- syntax-error - 语法错误:到达了意外的文件结尾。你有一个未关闭的#if
- python - 如果键与 3D 列表匹配,则使用字典中的值
- ruby-on-rails - Ruby on Rails 中的过滤
- sql-server - 使用多个键上的连接构建动态 SQL
- .net - System.ArgumentException:初始化字符串的格式不符合从索引 120 开始的规范
- r - 无需等待来自 modalDialog 的输入即可执行闪亮的代码
- python - 将python代码模块化为可重用函数