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

如何将Pandas DataFrame中Year2列数据合并至Year1列并保留对应Total值生成独立行

解决Pandas DataFrame年份列合并问题

嘿,我来帮你搞定这个数据转换的需求!你想要把Year2列的年份合并到Year1列,同时让每个年份都对应原来的Total值,这里有两种实用的方法:

方法一:使用melt函数(推荐,更简洁)

pd.melt是Pandas处理宽表转长表的常用工具,非常适合这种把多列年份合并成一列的场景,步骤如下:

import pandas as pd

# 你的原始DataFrame
df = pd.DataFrame({
    'Year1': [2010, 2012, 2014],
    'Year2': [2011, 2013, 2015],
    'Total': [2500, 3000, 4000]
})

# 用melt转换:保留Total列,把Year1和Year2转为行
result = df.melt(
    id_vars='Total',  # 要保留的关联列
    value_vars=['Year1', 'Year2'],  # 需要转换为行的列
    value_name='Year1'  # 转换后的目标列名
)

# 移除自动生成的临时列,排序后重置索引
result = result.drop('variable', axis=1)
result = result.sort_values('Year1').reset_index(drop=True)

print(result)

运行后就能得到你想要的结果:

Total  Year1
0   2500   2010
1   2500   2011
2   3000   2012
3   3000   2013
4   4000   2014
5   4000   2015

方法二:基于你已有的代码改进

你已经用np.repeat复制了行,接下来只需要把奇数行的Year1替换为Year2的值,再删掉Year2列即可:

import pandas as pd
import numpy as np

# 你的原始DataFrame
df = pd.DataFrame({
    'Year1': [2010, 2012, 2014],
    'Year2': [2011, 2013, 2015],
    'Total': [2500, 3000, 4000]
})

# 你已经完成的重复行步骤
df = pd.DataFrame(np.repeat(df.values, 2, axis=0))
df.columns = ['Year1', 'Year2', 'Total']

# 改进部分:把奇数索引行的Year1替换为Year2的值
df.loc[df.index % 2 == 1, 'Year1'] = df.loc[df.index % 2 == 1, 'Year2']

# 删除Year2列,重置索引
df = df.drop('Year2', axis=1).reset_index(drop=True)

print(df)

这个方法完全基于你已有的尝试,通过定位重复后的奇数行(对应原Year2的年份),替换Year1的值,最终得到目标结构。

两种方法都能达到你的需求,推荐第一种melt的方式,代码更简洁易读,也更符合Pandas的惯用操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:37:40