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

如何在Python Pandas中从DataFrame列表生成新DataFrame集合

问题描述

我有一个包含多个DataFrame字典的列表,定义如下:

import pandas as pd

df1 = {'col1': ['a', 'a', 'b', 'c', 'c', 'd'], 'col2': [3, 4, 3, 8, 4, 5], 'col3': ['cat', 'cat', 'cat', 'cat', 'cat', 'cat']}
df2 = {'col1': ['a', 'a', 'b', 'c', 'c', 'd'], 'col2': [30, 40, 30, 80, 40, 50], 'col3': ['dog', 'dog', 'dog', 'dog', 'dog', 'dog']}
df3 = {'col1': ['a', 'a', 'b', 'c', 'c', 'd'], 'col2': [31, 41, 31, 81, 41, 51], 'col3': ['whale', 'whale', 'whale', 'whale', 'whale', 'whale']}

dfList = [df1, df2, df3]

需要实现两个需求:

  1. 生成一个新的DataFrame列表,每个新DataFrame对应col1中的一个值(含重复值,比如两个a),以col2和col3为列,数据取自原列表中的每个DataFrame。
  2. 将上述结果整合到单个DataFrame中,按指定格式展示。

解决方案

一、生成对应col1值的DataFrame列表

先将每个字典转为pandas DataFrame,添加行索引标识确保同位置行对应,再拼接所有DataFrame,最后按col1和原行索引分组得到目标列表。

# 转换字典为DataFrame并添加行索引标识
dfs = []
for df_dict in dfList:
    df = pd.DataFrame(df_dict)
    df['row_id'] = df.index  # 用原行索引区分同一col1的不同组
    dfs.append(df)

# 拼接所有DataFrame
combined_df = pd.concat(dfs, ignore_index=True)

# 分组生成目标DataFrame列表
result_list = []
for (col1_val, _), group in combined_df.groupby(['col1', 'row_id']):
    target_df = group[['col2', 'col3']].copy()
    # 设置列标题为col1的值
    target_df.columns = pd.MultiIndex.from_tuples([(col1_val, 'col2'), (col1_val, 'col3')])
    result_list.append(target_df)

# 查看第一个结果示例
print(result_list[0])

输出示例:

a     
  col2 col3
0    3  cat
1   30  dog
2   31 whale

二、整合到单个DataFrame

基于拼接后的combined_df,将col1设为索引并排序,利用pandas默认的重复索引隐藏机制实现目标格式。

# 整理数据并设置索引
final_df = combined_df[['col1', 'col2', 'col3']].set_index('col1')
# 按col1和组内顺序排序
final_df = final_df.sort_values(by=['col1', final_df.groupby('col1').cumcount()])

# 开启重复索引隐藏显示
pd.set_option('display.multi_sparse', True)
print(final_df)

输出示例:

col2  col3
col1          
a      3   cat
       30   dog
       31 whale
a      4   cat
       40   dog
       41 whale
b      3   cat
       30   dog
       31 whale
c      8   cat
       80   dog
       81 whale
c      4   cat
       40   dog
       41 whale
d      5   cat
       50   dog
       51 whale

内容的提问来源于stack exchange,提问作者four-eyes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:24:27