使用无序索引

时间:2018-04-23 15:44:05

标签: python pandas datetime dataframe shift

我有一个包含很多行的pandas datafrrame,由PeriodIndex索引。我需要做的是添加一个列,其中包含来自其他一些列的数据,但时间会发生变化。

出于这个原因,我知道我必须使用shift或tshift方法。但是,我有一个复杂的问题:我不确定索引是否已排序。我无法检查这个,因为实际上我正在执行的操作是在groupby函数内(具体来说:ORIGINAL索引没有按日期排序,但是在groupby方法的每个组中它应该是 - 但我不是100%肯定)

简而言之,我想确保附加列在前一个时间段从原始列中获取数据 - 这可能与上面的行不一致。我还希望不会创建额外的行(在原始行中的最后一行之后)。

以下是我尝试的三种方法,它们提供相同的输出并且似乎有效。

In [1]:  df = pd.DataFrame(data=[1,2,3,4], index=pd.to_datetime([2011, 2012, 2010, 2013], format='%Y').to_period(freq='Y'))

In [2]:  df
Out[2]:
      0
2011  1
2012  2
2010  3
2013  4

In [3]: df['A'] = df.loc[:,0].shift(freq='Y')

In [4]: df['B'] = df.loc[:,0].tshift(1)

In [5]: df['C'] = df.loc[:,0].tshift(freq='Y')

In [6]: df
Out[6]:
      0    A    B    C
2011  1  3.0  3.0  3.0
2012  2  1.0  1.0  1.0
2010  3  NaN  NaN  NaN
2013  4  2.0  2.0  2.0

然而,这三种方法真的相同吗?如果没有,哪个是正确的?如果是的话,出于某些原因,这些是否优于其他原因?

0 个答案:

没有答案