如何合并DataFrame同名列?求助实现类SQL UNION的列合并操作
解决多列同名DataFrame的合并(类似SQL UNION)问题
我完全懂你的需求——转置后的DataFrame里有多个重复的y和n列,你想把所有同名列的内容按顺序合并,就像SQL里的UNION操作,最终把所有y列的词汇按序列出来,n列同理,长度不够的位置补None。下面是具体的解决步骤和代码:
第一步:复现你的原始数据
先把你给出的示例数据还原,方便后续操作:
import pandas as pd cie = ['y','n','y','n'] words = [['bank', 'payment'],['student', 'loan','payment'],['bank', 'payment'],['student', 'loan']] df = pd.DataFrame(data=words, index=cie) df_transposed = df.T # 转置得到包含多个y/n列的目标DataFrame
第二步:核心处理逻辑
我们需要按列名分组,把每个分组内的多列内容扁平化,再统一补全到最长长度,最后组合成新的DataFrame:
# 计算所有分组需要的最大长度(保证最终结果的行列对齐) max_length = max( df_transposed.groupby(axis=1, level=0) .apply(lambda group: group.size) # 统计每个分组的总元素数 ) # 初始化结果DataFrame result_df = pd.DataFrame() # 遍历每个列名分组(y和n) for col_name, group in df_transposed.groupby(axis=1, level=0): # 把分组内的所有元素扁平化,同时将NaN替换为None(匹配你的期望输出) flattened_values = [ val if pd.notna(val) else None for val in group.values.flatten() ] # 补全到最大长度,不足的位置填充None padded_values = flattened_values + [None] * (max_length - len(flattened_values)) # 将处理后的列添加到结果DataFrame result_df[col_name] = padded_values
第三步:查看最终结果
运行上述代码后,result_df就是你想要的输出:
y n 0 bank student 1 payment loan 2 None payment 3 bank student 4 payment loan 5 None None
逻辑解释
- 分组:用
groupby(axis=1, level=0)按列名对转置后的DataFrame分组,所有y列会被归为一组,n列归为另一组。 - 扁平化:把每组内的多列数据转成一维列表,实现类似SQL UNION的合并效果,把同名列的内容按顺序拼接。
- 补全长度:不同分组的总元素数可能不同(比如
n列总元素数是3+2=5,y列是2+2=4),找到最大长度后给短列表补None,确保最终DataFrame的行列完全对齐。
内容的提问来源于stack exchange,提问作者Vincent Yuan
相关产品推荐
相关产品推荐

