Pandas Concat不同大小的DataFrame到列的结尾

时间:2017-12-29 22:14:53

标签: python pandas dataframe

注意:举例说明。请不要讨厌预测,我也不需要建议。这绝对是熊猫的问题。

示例 - 一个解决方案

我有两个不同大小的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))

这给了我期望的结果:

enter image description here

问题

我想知道的是:我可以连接到销售数据的末尾,而无需执行额外的班次(最后一个命令)吗?我想一步而不是两步。 concat或类似的东西很好,但我想跳过这个转变。

我没有挂断两行代码。没关系。我想要一个具有最大可能性能的解决方案。由于数量巨大,我的应用程序对我们投入的每一毫秒都很敏感。

1 个答案:

答案 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

给出相同的输出。