我有一个像这样的pandas数据框:
user date value
1 01-2000 5
1 02-2000 6
1 03-2000 7
1 04-2000 8
2 01-2000 3
2 02-2000 4
2 03-2000 5
2 04-2000 6
3 01-2000 10
3 02-2000 11
3 03-2000 12
3 04-2000 13
我想创建一个新列,其中包含上个月每个用户的值,因此它看起来像这样:
user date value new_col
1 01-2000 5 NaN
1 02-2000 6 5
1 03-2000 7 6
1 04-2000 8 7
2 01-2000 3 NaN
2 02-2000 4 3
2 03-2000 5 4
2 04-2000 6 5
3 01-2000 10 NaN
3 02-2000 11 10
3 03-2000 12 11
3 04-2000 13 12
有人可以建议如何做到最好吗?感谢。
答案 0 :(得分:3)
使用shift():
import pandas as pd
import io
text = '''\
user date value
1 01-2000 5
1 02-2000 6
1 03-2000 7
1 04-2000 8
2 01-2000 3
2 02-2000 4
2 03-2000 5
2 04-2000 6
3 01-2000 10
3 02-2000 11
3 03-2000 12
3 04-2000 13'''
df = pd.read_table(io.BytesIO(text), sep='\s+')
df['new_col'] = df.groupby('user')['value'].apply(lambda grp: grp.shift())
print(df)
产量
user date value new_col
0 1 01-2000 5 NaN
1 1 02-2000 6 5
2 1 03-2000 7 6
3 1 04-2000 8 7
4 2 01-2000 3 NaN
5 2 02-2000 4 3
6 2 03-2000 5 4
7 2 04-2000 6 5
8 3 01-2000 10 NaN
9 3 02-2000 11 10
10 3 03-2000 12 11
11 3 04-2000 13 12