如何将DataFrame中Adj.列的列表拆分为单独行?
这问题我之前也碰到过!根源其实是你的DataFrame有重复的列名(两个Connector、两个Pin),导致合并操作时触发了多索引冲突。给你两个解决方案,优先用更简洁的那个:
解决方法:拆分列表列并处理重复列名问题
首先必须先处理重复列名的问题,这是触发报错"Merging with both multi-indexes is not implemented"的核心原因:
步骤1:给重复列设置唯一名称
先把重复的列名改成唯一标识,避免后续索引对齐出问题:
# 重命名列,确保每个列名唯一 df.columns = ['Connector', 'Pin', 'Connector_adj', 'Pin_adj', 'Adj.', 'Color']
方法1:使用explode()(推荐,pandas 0.25+支持)
这是pandas官方专门为拆分列表/数组列推出的方法,简洁高效:
# 直接拆分Adj.列的列表,每个元素生成单独一行 result_df = df.explode('Adj.').reset_index(drop=True)
执行后就能得到你想要的输出:每个列表元素对应一行,其他列的数值保持不变。
方法2:兼容低版本pandas(0.25以下)
如果你的pandas版本较低,用apply+stack的方式实现,注意保持索引对齐:
# 拆分Adj.列的列表,生成带原索引的Series adj_expanded = df['Adj.'].apply(pd.Series).stack().reset_index(level=1, drop=True) adj_expanded.name = 'Adj.' # 合并回原DataFrame(先删除原Adj.列) result_df = df.drop('Adj.', axis=1).join(adj_expanded)
验证结果
处理后的result_df会和你给出的期望输出一致,比如第一组数据会变成:
| Connector | Pin | Connector_adj | Pin_adj | Adj. | Color |
|---|---|---|---|---|---|
| F123 | 1 | F123 | 1 | 2 | R |
| F123 | 1 | F123 | 1 | 6 | R |
| F123 | 1 | F123 | 1 | 7 | R |
内容的提问来源于stack exchange,提问作者MaxB
相关产品推荐
相关产品推荐

