【发布时间】:2015-11-20 19:00:12
【问题描述】:
我是 Python 的新手,我正在努力编写 PHP/SQL 中看似简单的东西,希望您能帮助我。
我有 2 个 Pandas 数据框,我已对其进行了简化以便更好地理解。
在第一个数据框 df2015 中,我有 2015 年的销售额。 !请注意,不幸的是,我们没有每个商店的所有值!
>>> df2015
Store Date Sales
0 1 2015-01-15 6553
1 3 2015-01-15 7016
2 6 2015-01-15 8840
3 8 2015-01-15 10441
4 9 2015-01-15 7952
另一个名为 df2016 的数据框用于 2016 年的销售预测,其中列出了 ALL 商店。
(如您所料,列 SalesForecast 是要填充的列。)
>>> df2016
Store Date SalesForecast
0 1 2016-01-15
1 2 2016-01-15
2 3 2016-01-15
3 4 2016-01-15
4 5 2016-01-15
我想创建一个函数,为 df2016 中的每一行检索 df2015 中的销售额值,例如,将这些值增加 5% 并添加df2016 的 SalesForecast 列中的这些新值。
假设 forecast 是我创建的要应用的函数:
def forecast(store_id,date):
sales2015 = df2015['Sales'].loc[(df2015['Store'].values == store_id) & (df2015['Date'].values == date )].values
forecast2016 = sales2015 * 1.05
return forecast2016
我已经用下面的硬编码方式测试了这个函数,它可以工作:
>>> forecast(1,'2015-01-15')
array([ 6880.65])
但这里是我的问题所在...如何将此函数应用于数据帧?
通过为 df2016 中的每一行创建一个循环并通过 SELECT 从 df2015 检索值(如果存在),在 PHP 中很容易做到这一点和 WHERE Store = store_id 和 Date = date.. ...但看起来逻辑与 Pandas Dataframes 和 Python 不一样。
我已经尝试了 apply 功能如下:
df2016['SalesForecast'] = df2016.apply(df2016['Store'],df2016['Date'])
但我无法正确提出论点,或者我做错了什么..
我认为我没有好的方法,或者我的方法可能根本不适合 Pandas 和 Python..?
【问题讨论】:
标签: python function python-2.7 pandas apply