注意:举例说明。请不要讨厌预测,我也不需要建议。这绝对是熊猫的问题。
示例 - 一个解决方案
我有两个不同大小的DataFrame,一个代表销售,一个代表预测。
sales = pd.DataFrame({'sales':[5,3,5,6,4,4,5,6,7,5]})
forecast = pd.DataFrame({'forecast':[5,5.5,6,5]})
预测需要与最新销售额相关联,最新销售额位于销售数量列表的末尾[5,6,7,5]。其他时候,我可能想在其他地方(请不要问为什么,我只需要这样)。
这有效:
df = pd.concat([sales, forecast], ignore_index=True, axis=1)
df.columns = ['sales', 'forecast'] # Not necessary, making next command pretty
df.forecast = df.forecast.shift(len(sales) - len(forecast))
这给了我期望的结果:
问题
我想知道的是:我可以连接到销售数据的末尾,而无需执行额外的班次(最后一个命令)吗?我想一步而不是两步。 concat或类似的东西很好,但我想跳过这个转变。
我没有挂断两行代码。没关系。我想要一个具有最大可能性能的解决方案。由于数量巨大,我的应用程序对我们投入的每一毫秒都很敏感。
答案 0 :(得分:2)
不确定这是否更快但你可以做到
For Each pi In pinfo
'I want to get the values of each property
Console.WriteLine(PropertyInfo.GetValue(MyCompanies(1))
Next pi
给出了
sales = pd.DataFrame({'sales':[5,3,5,6,4,4,5,6,7,5]})
forecast = pd.DataFrame({'forecast':[5,5.5,6,5]})
forecast.index = sales.index[-forecast.shape[0]:]
然后简单地
forecast
6 5.0
7 5.5
8 6.0
9 5.0
产生预期的结果:
pd.concat([sales, forecast], axis=1)
@Dark在评论中提到的使用相同想法的单行解决方案将是:
sales forecast
0 5 NaN
1 3 NaN
2 5 NaN
3 6 NaN
4 4 NaN
5 4 NaN
6 5 5.0
7 6 5.5
8 7 6.0
9 5 5.0
给出相同的输出。