如何在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中类似的逐步更新逻辑:
- 先将Results的
ID设为索引,初始化Prediction列为空值(np.nan) - 每次调用
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
相关产品推荐
相关产品推荐

