如何将Pandas数据集的多列逗号分隔值拆分为逐行记录
Pandas拆分多列逗号分隔值并展开成行
原始数据集
| order | container | box |
|---|---|---|
| a | c1,c2,c3 | b1,b2,b3 |
| b | c4,c5,c6 | b4,b5,b6 |
需求
生成包含order和content两列的表格,content列需包含container和box列的所有值,每个值单独占一行,期望结果如下:
| order | content |
|---|---|
| a | c1 |
| a | c2 |
| a | c3 |
| a | b1 |
| a | b2 |
| a | b3 |
| b | c4 |
| b | c5 |
| b | c6 |
| b | b4 |
| b | b5 |
| b | b6 |
解决方案
方法一:先合并列再拆分展开
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'order': ['a', 'b'], 'container': ['c1,c2,c3', 'c4,c5,c6'], 'box': ['b1,b2,b3', 'b4,b5,b6'] }) # 合并container和box列,用逗号分隔 df['content'] = df['container'].str.cat(df['box'], sep=',') # 拆分content为列表并展开成行,保留需要的列 result = df.assign(content=df['content'].str.split(',')).explode('content')[['order', 'content']] print(result)
方法二:分别拆分两列再合并结果
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'order': ['a', 'b'], 'container': ['c1,c2,c3', 'c4,c5,c6'], 'box': ['b1,b2,b3', 'b4,b5,b6'] }) # 拆分container列并展开 container_df = df.assign(content=df['container'].str.split(',')).explode('content')[['order', 'content']] # 拆分box列并展开 box_df = df.assign(content=df['box'].str.split(',')).explode('content')[['order', 'content']] # 合并两个结果,按order排序 result = pd.concat([container_df, box_df]).sort_values('order').reset_index(drop=True) print(result)
两种方法都能得到预期结果,explode()是Pandas中专门用于将列表类型单元格拆分为多行的工具,适配这类场景非常高效。
内容的提问来源于stack exchange,提问作者bluekit46
相关产品推荐
相关产品推荐

