如何在Python中不规则长度的行上设置索引?

时间:2019-01-02 17:30:08

标签: python python-3.x pandas

我试图将第二个数据帧的索引设置为第一个数据帧的索引,以便以后可以通过将在所有数据帧之间匹配的索引来引用行。

这样做的目的是让我引用原始的需求数据框,以及在同一会计年度/每周上都应用了.rolling(window = X).mean()的后续数据框来执行一些计算

我尝试过的内容

demand_df_7wkfwdavg = demand_df_7wkfwdavg.reindex_like(demand_df)

demand_df_7wkfwdavg = demand_df_7wkfwdavg.set_index(demand_df.index)

也参考reindex,set_index,reindex_like进入文档,但是要么使新数据框从201840开始,NaN一直到201846,要么得到一个错误,说明长度与两个数据框的索引之间不匹配(他们不会,他们将是57岁,而65岁是给予或接受)

让我们一臂之力

我有两个数据帧,第一个是Demand_df,第二个是Demand_df_7wkfwdavg。

第一个数据帧的设置是这样的,其中第一列是索引,也指示会计年度/周,第二列是该特定项目的需求值(列标题是该项目名称):

201840 344.75 
201841 433.75 
201842 344.75 
201843 355.75 
201844 241.60 
201845 241.60 
201846 241.60

以相同的方式设置第二个数据帧,但是在这种情况下,在执行以下命令后,它将从201846开始:

###Applies a rolling average to each column using the window size specified
demand_df_7wkfwdavg = demand_df.rolling(window=7).mean()


###Fill any NaN's with zeroes
demand_df_7wkfwdavg = demand_df_7wkfwdavg.fillna(0)


###Round the numbers to 2 decimal places
demand_df_7wkfwdavg = demand_df_7wkfwdavg.round(2)


###Remove any row that sums zero
demand_df_7wkfwdavg = demand_df_7wkfwdavg.loc[(demand_df_7wkfwdavg!=0).any(axis=1)]

201846 314.54 
201847 299.81 
201848 272.36

最终状态目标示例

考虑当前周的需求(201840),查看所有其他数据框并提取相应的值,因此在这种情况下,它将查看第二个数据框,并说第一个数据框中的类似商品的201840 = 314.54,而不是201846 = 314.54。

所需的输出:

201840 314.54 
201841 299.81 
201842 272.36

当前输出:

201846 314.54 
201847 299.81 
201848 272.36

1 个答案:

答案 0 :(得分:0)

总结您的问题,您似乎想要前进平均值,但实际上是在计算后退平均值。有一些解决索引问题的方法(例如切片),但我认为一种更有效的方法是在计算平均值时移动值。

如果您更改:

 demand_df_7wkfwdavg = demand_df.rolling(window=7).mean()

 demand_df_7wkfwdavg = demand_df.rolling(window=7).mean().shift(-6)

您将获得所需的输出,而无需添加任何步骤。