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

合并DataFrame重复列:基于Series构建DataFrame的问题求助

解决Pandas追加Series导致重复列的问题

嗨,我来帮你搞定这个重复列的问题!你现在遇到的情况是因为用append()逐个添加单个元素的Series时,Pandas会把每个Series的Name当作新列名,导致相同股票名称的列重复出现,而且值只在对应行填充,其他行都是NaN。

最简洁的解决方案:收集Series后合并再转置

我们可以换个思路,先把所有的temp_num收集到列表里,然后用Pandas的内置函数合并并整理成你想要的格式:

# 初始化列表收集所有Series
series_collection = []
all_keys = list(dict_months.keys())

for i in all_keys:
    for j in range(len(dict_months[i])):
        temp_num = df_mth_return.loc['1992-'+str(i), dict_months[i][j]]
        series_collection.append(temp_num)

# 合并所有Series成一个大Series
combined_series = pd.concat(series_collection)

# 将股票名称(原Series的Name)转成列,日期作为索引
final_df = combined_series.unstack(level=-1)

为什么这个方法有效?

  • pd.concat(series_collection)会把所有Series堆叠成一个大Series,索引是日期(Date),每个元素的关联信息是原Series的Name(股票名称)。
  • unstack(level=-1)会把股票名称从元素属性转成DataFrame的列,自动将相同日期的股票值对齐,重复的列会被合并,每个日期对应的股票值会正确填充到对应的单元格。

备选方案:用字典整理数据后构建DataFrame

如果你更喜欢分步处理,也可以用字典先整理每个股票的日期和数值:

# 初始化字典,键是股票名称,值是{日期: 收益率}的字典
stock_data = {}
all_keys = list(dict_months.keys())

for i in all_keys:
    for j in range(len(dict_months[i])):
        temp_num = df_mth_return.loc['1992-'+str(i), dict_months[i][j]]
        stock_name = temp_num.name
        date = temp_num.index[0]
        value = temp_num.iloc[0]
        
        if stock_name not in stock_data:
            stock_data[stock_name] = {}
        stock_data[stock_name][date] = value

# 构建最终DataFrame
final_df = pd.DataFrame(stock_data)

这个方法会直接按股票名称创建列,日期作为索引,自动填充对应的值,没有重复列。

验证结果

用你给出的示例数据,两种方法都会得到符合预期的格式:相同列只显示一次,日期与对应股票值正确对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:43:32