2013-06-28 32 views
1

我有一個熊貓數據幀,看起來是這樣的:熊貓:創建柱從以前的TimeSeries價值

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 

請有人建議如何做到最好?謝謝。

回答

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