You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataFrame各列所有行按顺序追加到第一列下方合并为单列

Pandas多列字典数据纵向拼接为单列实现方案

问题背景

现有DataFrame所有单元格存储值均为字典类型,仅最后一列存在少量None值,4行4列的示例结构如下:

0                            1                       2                       3
{'id':10,'name':'Paul'}     {'id':10,'age':33}        {'id':10,'name':'Paul'} {'id':10,'name':'Paul'} 
{'id':10,'name':'Paul'}     {'id':10,'age':'Paul'}    {'id':10,'name':'Paul'} {'id':10,'name':'Paul'}
{'id':10,'name':'Paul'}     {'id':10,'name':'Paul'}   {'id':10,'name':'Paul'} {'id':10,'name':'Paul'}
{'id':10,'name':'Paul'}     {'id':10,'name':'Paul'}   {'id':10,'name':'Paul'} None

实际数据规模为500行7列,共约3500条记录,不同单元格的字典内容可重复可存在差异。

转换规则

按列顺序纵向拼接所有内容:先保留第0列全部行,再将第1列全部行追加到第0列末尾,后续每一列都按相同规则依次追加到已拼接内容的末尾,最终输出仅包含1列的DataFrame,所有原始值(包括None)完整保留。
预期输出结构参考:

0
{'id':10,'name':'Paul'}             
{'id':10,'name':'Paul'}         
{'id':10,'name':'Paul'}      
{'id':10,'name':'Paul'}     
{'id':10,'age':33} 
{'id':10,'age':'Paul'}
{'id':10,'name':'Paul'}
{'id':10,'name':'Paul'}
{'id':10,'name':'Paul'}
{'id':10,'name':'Paul'}
...
None

实现代码

采用numpy列优先展平逻辑实现,运行效率高,适配当前数据规模无性能压力:

import pandas as pd

# 将df替换为你实际使用的原始DataFrame变量名即可
result = pd.DataFrame(df.values.flatten(order='F'), columns=[0])

逻辑说明

  • order='F'指定按列优先顺序展平二维数组,取值顺序完全匹配「先取完一列所有行,再取下一列」的需求
  • 该方法不会修改原始单元格存储的值,字典、None都会原样保留
  • 逐列循环concat的写法也可实现相同效果,但运行效率低于数组展平方案,不推荐在数据量更大的场景使用

内容的提问来源于stack exchange,提问作者pouchewar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 12:12:21