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

Pandas:如何更新DataFrame并追加新条目?

解决pandas中同时更新已有索引值并追加新索引行的问题

你遇到的情况是DataFrame.update()方法的预期行为——它只会更新调用者(df1)中已存在的索引和列对应的数值,不会自动添加新的行或列。要实现「更新已有值+追加新索引行」的需求,针对pandas 1.1.5版本,有两种简单可靠的方案:

方案1:先更新,再追加新行

这个方法逻辑清晰,分两步完成需求:

  1. 先用update()完成已有索引的数值更新
  2. 提取df2中df1没有的索引行,追加到df1中

代码示例

import pandas as pd

# 构造你的原始数据
df1 = pd.DataFrame(
    {'Revenue': [100, 500, 200],
     'Profit': [300, 900, 100],
     'Sales': [1, 3, 4]},
    index=[0, 1, 2]
)

df2 = pd.DataFrame(
    {'Sales': [10, 12]},
    index=[0, 6]
)

# 第一步:更新已有索引的对应值
df1.update(df2)

# 第二步:提取df2中df1没有的索引,追加到df1
new_rows = df2.loc[df2.index.difference(df1.index)]
df1 = pd.concat([df1, new_rows]).sort_index()

print(df1)

输出结果

Revenue  Profit  Sales
0    100.0   300.0   10.0
1    500.0   900.0    3.0
2    200.0   100.0    4.0
6      NaN     NaN   12.0

方案2:用concat+groupby一步到位

如果想更简洁,可以通过pd.concat()合并两个DataFrame,再按索引分组取最后一行(因为df2的行在concat后排在df1后面,会覆盖之前的数值):

代码示例

import pandas as pd

# 构造原始数据(同上)
df1 = pd.DataFrame(
    {'Revenue': [100, 500, 200],
     'Profit': [300, 900, 100],
     'Sales': [1, 3, 4]},
    index=[0, 1, 2]
)

df2 = pd.DataFrame(
    {'Sales': [10, 12]},
    index=[0, 6]
)

# 合并后按索引分组,取最后一行(即优先保留df2的更新值)
df_combined = pd.concat([df1, df2]).groupby(level=0).last()

print(df_combined)

输出结果和方案1完全一致,同样满足你的需求。

注意事项

  • 两种方法都能保留df1原有的列顺序,新行中不存在的列会自动填充NaN
  • 方案2更简洁,但如果你的DataFrame有大量重复索引(非本例情况),需要确认分组逻辑符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:02:31