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

Pandas为现有DataFrame分组添加新行报错,求替代append的方法

问题:为分组后的Pandas DataFrame添加指定新行

需求:对已有的Pandas DataFrame按group字段分组后,为每组末尾添加一行新行——新行的group为当前组名称、year为该组对应的年份、value为空值。

初始数据代码

import pandas as pd
import random

random.seed(42)
data = {'group':['a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c' ],
        'value' : [1, 2, 5,  3, 4, 5, 7, 4, 7, 9],
        'year': ['2010', '2010', '2010', '2011', '2011', '2011', '2011', '2012', '2012','2012', ]}

df = pd.DataFrame(data)

期望输出格式

group   value   year
0   a       1       2010
1   a       2       2010
2   a       5       2010
3   a               2010
0   b       3       2011
1   b       4       2011
2   b       5       2011
3   b       7       2011
4   b               2011
0   c       4       2012
1   c       7       2012
2   c       9       2012
3   c               2012

尝试的代码及报错

最初尝试用append方法实现,但收到Pandas的弃用警告:

new_row={'value':''}
df2 = df.groupby(df['group'])
df = pd.concat([i.append(new_row, ignore_index=True) for _, i in df2])
df

报错提示:

FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
  df = pd.concat([i.append(new_row, ignore_index=True) for _, i in df2])

解决方案

方法一:分组后用pd.concat替换append

在分组处理逻辑中,用pd.concat替代DataFrame.append,直接拼接每组数据和新行,彻底规避弃用警告:

def add_empty_row(group_df):
    # 获取当前组的group和year值
    current_group = group_df['group'].iloc[0]
    current_year = group_df['year'].iloc[0]
    # 构建新行的DataFrame
    empty_row = pd.DataFrame({'group': [current_group], 'year': [current_year], 'value': ['']})
    # 拼接原组数据与新行
    return pd.concat([group_df, empty_row], ignore_index=True)

# 分组应用函数并合并结果
result_df = df.groupby('group', group_keys=False).apply(add_empty_row)
print(result_df)

方法二:批量构建空行后整体合并

先提取每个分组的group和year信息,批量生成所有需要添加的空行,再和原数据合并后排序,适合数据量较大的场景:

# 提取每个分组的唯一group和year
group_year = df.groupby('group')[['group', 'year']].first().reset_index(drop=True)
# 设置空行的value为空
group_year['value'] = ''

# 合并原数据与空行数据
combined_df = pd.concat([df, group_year], ignore_index=True)
# 按group排序,确保空行在每组末尾
result_df = combined_df.sort_values(by=['group', 'value'], na_position='last', ignore_index=True)
print(result_df)

两种方法均能满足需求,且不会触发append的弃用警告。方法一逻辑直观,适合小数据集;方法二效率更高,适合大规模数据处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:18:23