2

我正在尝试解决熊猫中的一个问题,更习惯于 R。

我有一个包含三列的数据框 df:人员、期间、值

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

我相信我需要执行以下命令,加载熊猫:

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

这应该如何制定?

4

1 回答 1

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 表示缺失数据(即上一时期没有条目)。

于 2013-09-11T17:02:32.813 回答