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

如何迭代选取Pandas DataFrame对应行并排序合并为单个DataFrame

按行分组排序拼接多个DataFrame

需求说明

从包含多个Pandas DataFrame的字典中,按行号依次提取所有DataFrame的对应行(第1行、第2行……第n行),将每组提取的行按my_value列排序后,依次拼接成一个新的DataFrame。

实现代码

import pandas as pd

# 定义原始数据
data1 = {'A': [1, 2, 3],
         'B': [4, 5, 6],
         'my_value': [0.1, 0.4, 0.3]}
df1 = pd.DataFrame(data1)

data2 = {'A': [7, 8, 9],
         'B': [10, 11, 12],
         'my_value': [0.2, 0.5, 0.6]}
df2 = pd.DataFrame(data2)

data3 = {'A': [13, 14, 15],
         'B': [16, 17, 18],
         'my_value': [0.9, 0.8, 0.7]}
df3 = pd.DataFrame(data3)

dfs = {'df1': df1, 'df2': df2, 'df3': df3}

# 核心处理逻辑
result_list = []
# 获取DataFrame的行数(假设所有DataFrame行数一致)
total_rows = next(iter(dfs.values())).shape[0]

for row_idx in range(total_rows):
    # 提取所有DataFrame的第row_idx行
    current_rows = [df.iloc[row_idx:row_idx+1] for df in dfs.values()]
    # 合并为临时DataFrame
    temp_df = pd.concat(current_rows, ignore_index=True)
    # 按my_value列排序
    sorted_df = temp_df.sort_values(by='my_value', ignore_index=True)
    # 加入结果列表
    result_list.append(sorted_df)

# 拼接所有排序后的分组
final_result = pd.concat(result_list, ignore_index=True)
print(final_result)

输出结果

A   B  my_value
0   1   4       0.1
1   7  10       0.2
2  13  16       0.9
3   2   5       0.4
4   8  11       0.5
5  14  17       0.8
6   3   6       0.3
7   9  12       0.6
8  15  18       0.7

关键说明

  • 使用iloc[row_idx:row_idx+1]而非iloc[row_idx],确保提取的是DataFrame格式而非Series,避免拼接时出现格式问题。
  • 假设字典中所有DataFrame的行数一致,若存在行数不同的情况,可以改为取最小行数min(df.shape[0] for df in dfs.values()),或对缺失行做填充处理。
  • 每次分组排序后通过列表收集,最后一次性拼接,比逐次拼接更高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:11:34