python - 按行垂直扩展数据框并保持相同值的有效方法?
问题描述
我正在 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 并从以前的经验中学习,可能有一种有效的方法可以做到这一点。
谢谢您的帮助!
解决方案
所以我找到了一种“更”有效的方法,然后 Reddit 的 r/learnpython 上的某个人告诉了我正确和最有效的方法。pandas的explode函数可以轻松解决上述难题。
这两行代码完成了我上面所做的事情,但在几秒钟内:
test['date'] = [nov15 for _ in range(len(test))]
test = test.explode('date')
现在我更有效的方法或第二个解决方案,它绝不接近等效或好的方法是简单地制作 30 个数据帧副本,并添加一个列“日期”。
推荐阅读
- java - 如何使服务器将客户端重定向到另一台服务器?
- java - jmap堆转储中的org.hibernate.hql.internal.ast.tree.Node是什么意思
- javascript - jQuery 在 each() 中查找
- c++ - c++ - Eigen 如何进行动态矩阵和向量乘法?
- android - 使用 RequestFocus() 后,EditText 字段表现为禁用
- c - 如何以降序方式对二维数组进行排序
- autohotkey - 如何使用快捷键作为变量而不是文本
- ruby - `detect` 和 `find` 返回 `nil` 而 `find_all` 和 `select` 返回结果
- python - 检查Magic Square python的程序
- mysql - mysql/mariadb information_schema 视图创建时间