我正在努力解决大熊猫的问题,更习惯于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']== [???]
应如何制定?
答案 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表示缺少数据(即上一期间没有条目)。