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

如何在Pandas列表的DataFrame中按条件添加行?

为Pandas DataFrame按条件补全行的解决方案

可行实现代码

直接使用以下完善后的函数即可实现需求:

import pandas as pd

def add_rows(df, max_mon, res):
    # 获取当前DataFrame的固定ID(假设每个DF内ID统一)
    fixed_id = df['ID'].iloc[0]
    # 生成从0到max_mon、步长为res的完整月份序列
    full_months = pd.DataFrame({'month': range(0, max_mon + res, res)})
    # 初始化完整数据:固定ID,num设为NaN
    full_months['ID'] = fixed_id
    full_months['num'] = pd.NA
    # 合并原数据,保留已有的num值
    merged = full_months.merge(df[['month', 'num']], on='month', how='left', suffixes=('', '_orig'))
    # 用原数据的num值填充,其余保持NaN
    merged['num'] = merged['num_orig'].combine_first(merged['num'])
    # 整理结果:保留目标列,按month排序
    return merged[['ID', 'month', 'num']].sort_values('month').reset_index(drop=True)

# 批量处理列表中的DataFrame
final = [add_rows(df, df['month'].max(), 3) for df in this]

需求回顾

需要处理多个DataFrame组成的列表,每个DF的补全规则:

  • ID保持固定不变
  • month从0开始按指定增量(如3)递增,覆盖到原DF的最大month值
  • 已存在的月份保留原num值,新增月份的num设为NaN

比如原第二个DF补全后会包含month=3、9、15等缺失月份,对应num为NaN。

代码逻辑解释

  1. 获取固定ID:取DF的第一个ID值(假设每个DF内ID完全一致)
  2. 生成完整月份序列:用range生成从0到最大month的所有间隔为res的月份,确保没有遗漏
  3. 初始化完整数据集:创建包含所有月份的新DF,设置好固定ID和初始NaN的num列
  4. 合并填充数据:通过左合并将原DF的num值匹配到对应月份,combine_first自动保留原数据、补全缺失值
  5. 整理输出:删除合并产生的冗余列,按month排序后返回

测试效果

以测试数据中的tempo2为例,执行后输出的前7行如下:

ID  month  num
0   6      0  5.0
1   6      3  NaN
2   6      6  4.0
3   6      9  NaN
4   6     12  3.0
5   6     15  NaN
6   6     18  2.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:35:16