Python 3.x 如何从具有相同结构的另一个数据帧的单行中填充一个数据帧的所有列
我有一个Python 3.x 如何从具有相同结构的另一个数据帧的单行中填充一个数据帧的所有列,python-3.x,pandas,dataframe,fillna,Python 3.x,Pandas,Dataframe,Fillna,我有一个train_df和一个test_df,它们来自同一个原始数据帧,但按一定比例分开,分别形成训练和测试数据集 列车和测试数据帧具有相同的结构: 带有每日桶的周期索引 n表示这些时间段中观察值的列数,例如销售、价格等 现在我想构造一个yhat_df,它存储每个列的预测值。在“幼稚”情况下,yhat_df列值只是最后观察到的训练数据集值 因此,我开始构建yhat_df,如下所示: import pandas as pd yhat_df = pd.DataFrame().reindex_li
train_df
和一个test_df
,它们来自同一个原始数据帧,但按一定比例分开,分别形成训练和测试数据集
列车和测试数据帧具有相同的结构:
- 带有每日桶的周期索引
- n表示这些时间段中观察值的列数,例如销售、价格等
yhat_df
,它存储每个列的预测值。在“幼稚”情况下,yhat_df
列值只是最后观察到的训练数据集值
因此,我开始构建yhat_df
,如下所示:
import pandas as pd
yhat_df = pd.DataFrame().reindex_like(test_df)
yhat_df[train_df.columns[0]].fillna(train_df.tail(1).values[0][0], inplace=True)
yhat_df(train_df.columns[1]].fillna(train_df.tail(1).values[0][1], inplace=True)
这似乎是可行的,因为我只有两列,额外的输入是可以忍受的
我想知道是否有更简单的方法,特别是一种不需要我逐列进行的方法
我尝试了以下方法,但这只是在PeriodIndex值匹配的地方正确填充列值。似乎fillna()
尝试在索引内部进行排序:
yhat_df.fillna(train_df.tail(1), inplace=True)
如果我能找到一种方法让fillna()
忽略索引,也许这会管用?你可以使用字典用不同的值填充每一列,所以我认为:
yhat_df = yhat_df.fillna(train_df.tail(1).to_dict('records')[0])
应该可以工作,但如果我很了解您的工作,那么甚至可以直接使用以下内容创建数据帧:
yhat_df = pd.DataFrame(train_df.tail(1).to_dict('records')[0],
index = test_df.index, columns = test_df.columns)
太神了我看到的唯一副作用是,得到的yhat_df具有按字母顺序排序的列顺序。我仍然使用Pandas 0.19.2,因此没有选择使用
来记录(orient='records',into=OrderedDict)
。这应该不是什么大问题,因为我的代码对列位置没有任何作用。@Cod.ie如果您希望列的顺序相同,也许您可以在创建数据框时添加参数columns
,我编辑了我的答案。太好了!谢谢:)