Pandas数据帧:根据以前的时间段添加列

时间:2013-09-11 16:54:17

标签: python numpy pandas time-series

我正在努力解决大熊猫的问题,更习惯于R。

我有一个包含三列的数据框df:person,period,value

df.head()或前几行看起来像:

  | person | period | value
0 | P22    | 1      | 0
1 | P23    | 1      | 0
2 | P24    | 1      | 1
3 | P25    | 1      | 0
4 | P26    | 1      | 1
5 | P22    | 2      | 1

注意最后一行记录了人P22的第2期值。

我现在想添加一个新列,它提供上一期间的值。因此,如果对于P22,期间1中的值为0,则此新列将如下所示:

  | person | period | value  | lastperiod
5 | P22    | 2      | 1      | 0

我相信我需要做一些类似下面的命令,加载pandas:

for p in df.period.unique():
    df['lastperiod']== [???]

应如何制定?

1 个答案:

答案 0 :(得分:3)

您可以按人员分组,然后将转移应用于值:

In [11]: g = df.groupby('person')

In [12]: g['value'].apply(lambda s: s.shift())
Out[12]: 
1   NaN
2   NaN
3   NaN
4   NaN
5   NaN
6     0
dtype: float64

将其添加为列:

In [13]: df['lastPeriod'] = g['value'].apply(lambda s: s.shift())

In [14]: df
Out[14]: 
  person  period  value  lastPeriod
1    P22       1      0         NaN
2    P23       1      0         NaN
3    P24       1      1         NaN
4    P25       1      0         NaN
5    P26       1      1         NaN
6    P22       2      1           0

此处NaN表示缺少数据(即上一期间没有条目)。