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

如何用Python按7:3分块规则从两个DataFrame生成新DataFrame?

实现DataFrame分组合并排序的函数

思路说明

已知df_a(400行)和df_b(300行)均按score降序排列,需按每组7行df_a + 3行df_b的规则分组,每组合并后重新按score降序排序,最终拼接成700行的新DataFrame。由于df_a总行数仅400,无法达到700行的70%(需490行),因此优先用完所有df_a数据,再匹配剩余df_b数据,保证占比最大化。

代码实现

import pandas as pd

def merge_sorted_dfs(df_a, df_b):
    # 存储每个分组处理后的结果
    group_list = []
    a_idx = 0
    b_idx = 0
    total_a = df_a.shape[0]
    total_b = df_b.shape[0]

    # 循环处理完整的7+3分组
    while a_idx + 7 <= total_a:
        # 截取当前组的df_a和df_b片段
        current_a = df_a.iloc[a_idx:a_idx+7]
        current_b = df_b.iloc[b_idx:b_idx+3]
        # 合并后按score降序排序
        merged_group = pd.concat([current_a, current_b], axis=0).sort_values(by='score', ascending=False)
        group_list.append(merged_group)
        # 更新索引指针
        a_idx += 7
        b_idx += 3

    # 处理df_a剩余的行(不足7行的部分)
    if a_idx < total_a:
        remaining_a = df_a.iloc[a_idx:]
        remaining_b = df_b.iloc[b_idx:]
        # 合并剩余数据并排序
        final_group = pd.concat([remaining_a, remaining_b], axis=0).sort_values(by='score', ascending=False)
        group_list.append(final_group)

    # 拼接所有分组,生成最终DataFrame
    final_df = pd.concat(group_list, axis=0, ignore_index=True)
    return final_df

代码解释

  • 循环处理完整分组:通过索引指针每次截取df_a的7行和df_b的3行,合并后重新排序,确保每组内数据仍按score降序排列。
  • 处理剩余数据:当df_a剩余不足7行时,取出剩余所有df_a和df_b数据,合并排序后加入结果列表。
  • 最终拼接:将所有分组结果拼接成一个完整的DataFrame,重置索引保证连续性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:17:51