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

将CSV中多组Name与Age列合并为两列的Pandas技术需求

解决多组Age/Name列堆叠并过滤NaN的问题

问题分析

需要将包含多组重复Age和Name列的DataFrame(示例为6列,实际2000列)按从左到右的组顺序堆叠成两列,同时忽略Name为NaN或Name与Age均为NaN的行。

解决方案代码

import pandas as pd
import numpy as np

# 示例数据
data = [['11', 'Nick', '10', 'Dave', '4', 'Greg'], 
        ['7', 'Nick', '10', 'Steve', '4', 'Jeff'], 
        ['1', 'Brad', np.nan, 'Jim', '3', "jas"],
        ['1','Steve', '2', 'Jack', np.nan,np.nan]]
  
df = pd.DataFrame(data, columns=['Age','Name', 'Age', 'Name', 'Age', 'Name'])

# 初始化结果DataFrame
result = pd.DataFrame(columns=['Age', 'Name'])

# 按每两列一组遍历(匹配Age+Name的组结构)
for i in range(0, len(df.columns), 2):
    # 提取当前组的Age和Name列
    group = df.iloc[:, [i, i+1]]
    # 统一列名,避免重复列名冲突
    group.columns = ['Age', 'Name']
    # 过滤掉Name为NaN的行(自动包含Name+Age均为NaN的情况)
    group_filtered = group.dropna(subset=['Name'])
    # 按组顺序追加到结果中
    result = pd.concat([result, group_filtered], ignore_index=True)

# 输出结果
print(result)

代码说明

  1. 分组遍历:通过range(0, len(df.columns), 2)按每两列一组提取数据,严格保证从左到右的组顺序不被打乱。
  2. 列名统一:将每组的重复列名重命名为Age和Name,避免拼接时的列名冲突。
  3. NaN过滤:使用dropna(subset=['Name'])精准过滤掉Name为NaN的行,同时自动覆盖Name与Age均为NaN的情况。
  4. 顺序拼接:用pd.concat按组顺序追加数据,ignore_index=True重置索引,生成连续的结果序列。

输出结果

Age   Name
0    11   Nick
1     7   Nick
2     1   Brad
3     1  Steve
4    10   Dave
5    10  Steve
6   NaN    Jim
7     2   Jack
8     4   Greg
9     4   Jeff
10    3    jas

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:42:54