首页 > 解决方案 > 按行垂直扩展数据框并保持相同值的有效方法?

问题描述

我正在 kaggle 上做这个教育挑战https://www.kaggle.com/c/competitive-data-science-predict-future-sales

训练集是一些产品的每日销售量的文件,我们需要预测的测试集是 11 月份类似商品的销售量。现在我想使用我的模型进行每日预测,从而将每行的测试数据集扩展 30 个。我有以下代码:

for row in test.itertuples():
    df = pd.DataFrame(index = nov15, columns = test.columns)
    df['shop_id'] = row.shop_id
    df['item_category_id'] = row.item_category_id
    df['item_price'] = row.item_price
    df['item_id'] = row.item_id
    df = df.reset_index()
    df.columns = ['date', 'item_id', 'shop_id', 'item_category_id', 'item_price']
    df = df[train.columns]
    tt = pd.concat([tt, df])

nov15是熊猫日期范围从 1/nov/2015 到 30/nov/2015

tt只是一个空数据集,我通过将测试集中的每一行扩展 30 行(11 月 1 日到 30 行)来填充。

test是我从中复制行的原始数据框

它运行,但需要几个小时才能完成。了解 pandas 并从以前的经验中学习,可能有一种有效的方法可以做到这一点。

谢谢您的帮助!

标签: pythonpandasdataframe

解决方案


所以我找到了一种“更”有效的方法,然后 Reddit 的 r/learnpython 上的某个人告诉了我正确和最有效的方法。pandas的explode函数可以轻松解决上述难题。

这两行代码完成了我上面所做的事情,但在几秒钟内:

test['date'] = [nov15 for _ in range(len(test))]
test = test.explode('date')

现在我更有效的方法或第二个解决方案,它绝不接近等效或好的方法是简单地制作 30 个数据帧副本,并添加一个列“日期”。


推荐阅读