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

Python中如何从拼接后的DataFrame恢复原始A_1和A_2?

恢复纵向拼接前的原始DataFrame

问题根源

你尝试用A_concat[1]、A_concat[2]拆分是错误的——pd.concat(axis=0)是行方向堆叠,结果是把A_1的所有行放在A_2前面,而A_concat[X]是按列索引/列名取值,和行拆分完全无关,自然拿不到原始DataFrame。

两种正确拆分方法

方法1:利用原始DataFrame的行数拆分

如果还能获取A_1、A_2的原始行数,直接用iloc按行范围切片:

# 获取A_1的行数
a1_rows = len(A_1)
# 拆分出原始A_1
restored_A1 = A_concat.iloc[:a1_rows, :]
# 拆分出原始A_2
restored_A2 = A_concat.iloc[a1_rows:, :]

方法2:拼接时预留标识,后续精准拆分

如果不确定原始行数,或者需要更清晰的溯源,可以在拼接时通过keys参数给两个DataFrame打标签,之后提取:

# 拼接时添加层级索引标记来源
A_concat = pd.concat([A_1, A_2], axis=0, keys=['source_A1', 'source_A2'])

# 方式A:用xs快速提取
restored_A1 = A_concat.xs('source_A1', level=0)
restored_A2 = A_concat.xs('source_A2', level=0)

# 方式B:用groupby遍历拆分
for label, df in A_concat.groupby(level=0):
    if label == 'source_A1':
        restored_A1 = df.reset_index(level=0, drop=True)  # 移除层级索引
    else:
        restored_A2 = df.reset_index(level=0, drop=True)

reset_index(level=0, drop=True)是为了去掉拼接时新增的层级索引,让恢复后的DataFrame和原始结构完全一致。

补充说明

如果拼接后做过行索引重置(比如用了ignore_index=True),方法1依然有效,只要你保留了原始A_1的行数;方法2则需要在拼接时就指定keys,否则无法追溯来源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:17:16