我有一个包含许多行的pandas dataframe,由PeriodIndex索引。我需要做的是添加一个列,其中的数据来自其他一些列,但在时间上发生了变化。你知道吗
因此,我知道我必须使用shift或tshift方法。但是,我有一个复杂的问题:我不确定索引是否已排序。我无法检查这一点,因为实际上我正在执行的操作是在groupby函数中进行的(具体来说:原始索引不是按日期排序的,但是在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
然而,这三种方法真的是等价的吗?如果没有,哪一个是正确的使用?如果是的话,出于某些原因,这些方法中有哪一种比其他方法更可取?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐