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

如何在Python中分批填充DataFrame(对标R的data.table操作)

在Python中逐步填充DataFrame的Prediction列(对应R的data.table更新逻辑)

我有一个包含ID和Prediction列的Results DataFrame,还有一个子函数Calc,每次调用会返回包含部分ID对应的ID和pred列的DataFrame。想要随着预测结果的生成逐步填充Results。

在R中用data.table实现非常简洁:

for x in cycles
    temp = Calc(x)
    Results[temp, on="ID",Prediction:=pred]

尝试用Python的merge方法(比如Results = Results.merge(temp, on=['ID'], how='left'))时,每次循环会新增列(比如第二次循环后出现Prediction_x、Prediction_y),不符合需求。虽然可以先收集所有temp结果再一次性合并,但存在更优的实现方式。

最优解决方案

利用Pandas的索引对齐特性和fillna方法,就能实现和R中类似的逐步更新逻辑:

  1. 先将Results的ID设为索引,初始化Prediction列为空值(np.nan)
  2. 每次调用Calc得到temp后,同样将temp的ID设为索引,通过fillna把Results中的空值替换为temp里的对应预测值

完整示例代码

import pandas as pd
import numpy as np

# 初始化结果DataFrame
Results = pd.DataFrame({'ID': [1,2,3,4]})
Results["Prediction"] = np.nan
Results = Results.set_index("ID")

# 模拟生成部分预测结果的函数
def Calc(x):
  if x == 1:
    return pd.DataFrame({'ID': [1,2], 'Prediction': [5,6]})
  if x == 2:
    return pd.DataFrame({'ID': [3,4], 'Prediction': [7,8]})

# 循环逐步填充结果
cycles = [1,2]
for x in cycles:
  temp = Calc(x)
  Results = Results.fillna(temp.set_index("ID"))

# 输出最终结果
print(Results)

输出结果

Prediction
ID  
1         5.0
2         6.0
3         7.0
4         8.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:32:03