1

我有一个看起来像这样的熊猫数据框:

    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

请有人建议如何最好地做到这一点?谢谢。

4

1 回答 1

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
于 2013-06-28T13:23:04.873 回答