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

合并DataFrame并重置ID列:问题排查与修正方案

Pandas合并DataFrame后重置ID列的解决方案

现有数据

有两个结构一致的DataFrame:

ID Name  Time
0   0    A   100
1   1    B    70
ID Name  Time
0   0    C    40
1   1    D    90

期望结果

合并后重置ID列,使ID从0开始连续递增,得到:

ID Name  Time
0   0    A   100
1   1    B    70
2   2    C    40
3   3    D    90

现有代码及问题

编写的代码如下:

big_df = pd.DataFrame()
for i in range(1,3):
    fname = 'test_' + str(i) + '.csv'
    small_df = pd.read_csv(fname, skiprows=[1])
    print(small_df)
    frames = [big_df, small_df]
    big_df = pd.concat(frames) 
    i += 1
big_df.set_index('ID', inplace=True)
print(big_df)

运行后输出为:

Name  Time
ID           
0     A   100
1     B    70
0     C    40
1     D    90

当前问题是ID列重复且未实现连续递增,同时set_index将ID列转为了索引,不符合预期需求。

修正方案

以下几种方式均可实现需求:

方法一:合并后重置索引并赋值给ID列

直接去掉set_index操作,改用重置默认索引的方式生成连续ID:

big_df = pd.DataFrame()
for i in range(1,3):
    fname = 'test_' + str(i) + '.csv'
    small_df = pd.read_csv(fname, skiprows=[1])
    frames = [big_df, small_df]
    big_df = pd.concat(frames) 
# 重置为从0开始的连续默认索引
big_df = big_df.reset_index(drop=True)
# 将新索引值赋值给ID列
big_df['ID'] = big_df.index
# 调整列顺序(可选,匹配期望结果的列顺序)
big_df = big_df[['ID', 'Name', 'Time']]
print(big_df)

方法二:结合你发现的索引转列方法修正

如果已经执行了set_index操作,可以通过以下步骤修正:

# 先重置默认连续索引,丢弃原ID索引
big_df = big_df.reset_index(drop=True)
# 将新索引赋值给ID列
big_df['ID'] = big_df.index
# 调整列顺序(可选)
big_df = big_df[['ID', 'Name', 'Time']]

方法三:合并时直接忽略原索引

在concat阶段使用ignore_index=True参数,自动生成连续索引,再赋值给ID列,代码更简洁:

big_df = pd.DataFrame()
for i in range(1,3):
    fname = 'test_' + str(i) + '.csv'
    small_df = pd.read_csv(fname, skiprows=[1])
    # 合并时直接生成连续索引
    big_df = pd.concat([big_df, small_df], ignore_index=True) 
# 将连续索引赋值给ID列
big_df['ID'] = big_df.index
# 调整列顺序(可选)
big_df = big_df[['ID', 'Name', 'Time']]
print(big_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:55:12