熊猫:从以前的TimeSeries值创建列

时间:2013-06-28 13:16:29

标签: python pandas

我有一个像这样的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

有人可以建议如何做到最好吗?感谢。

1 个答案:

答案 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
相关问题