首页 > 解决方案 > 如何从具有相同结构的另一个数据帧的单行中填充数据帧的所有列

问题描述

我有 atrain_df和 a test_df,它们来自相同的原始数据框,但按一定比例分开以分别形成训练和测试数据集。

训练和测试数据帧都具有相同的结构:

我现在想构造一个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()试图join()在索引内部做一些事情:

yhat_df.fillna(train_df.tail(1), inplace=True)

如果我能找到一种fillna()忽略索引的方法,也许这会起作用?

标签: python-3.xpandasdataframefillna

解决方案


您可以使用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)

推荐阅读