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

如何合并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

逻辑解释

  1. 分组:用groupby(axis=1, level=0)按列名对转置后的DataFrame分组,所有y列会被归为一组,n列归为另一组。
  2. 扁平化:把每组内的多列数据转成一维列表,实现类似SQL UNION的合并效果,把同名列的内容按顺序拼接。
  3. 补全长度:不同分组的总元素数可能不同(比如n列总元素数是3+2=5,y列是2+2=4),找到最大长度后给短列表补None,确保最终DataFrame的行列完全对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:19:36