[英]Python Pandas self merge on previous data
我有一個包含多年數據的DataFrame。 我要創建幾個包含同一DataFrame的前幾年數據的列。 這是一個例子:
df = pd.DataFrame({'id': [1,1,1,2,2,2,3,4,5,3,3,3,4],
'yr': [87,88,89,54,55,53,87,87,89,90,91,92,86],
'data': '1-87 1-88 1-89 2-54 2-55 2-53 3-87 4-87 5-89 3-90 3-91 3-92 4-86'.split()})
data id yr
0 1-87 1 87
1 1-88 1 88
2 1-89 1 89
3 2-54 2 54
4 2-55 2 55
5 2-53 2 53
6 3-87 3 87
7 4-87 4 87
8 5-89 5 89
9 3-90 3 90
10 3-91 3 91
11 3-92 3 92
12 4-86 4 86
我想在另一列上添加該ID號的前幾年數據。 像這樣:
data id yr last_year_data
0 1-87 1 87 NaN
1 1-88 1 88 1-87
2 1-89 1 89 1-88
3 2-54 2 54 2-53
4 2-55 2 55 2-54
5 2-53 2 53 NaN
6 3-87 3 87 NaN
7 4-87 4 87 4-86
8 5-89 5 89 NaN
9 3-90 3 90 NaN
10 3-91 3 91 3-90
11 3-92 3 92 3-91
12 4-86 4 86 NaN
我嘗試通過合並來做到這一點,但在合並的第二部分中我一直把Nan壓倒了。 這是我的代碼:
df['last_year'] = df['yr'].apply(lambda x: x-1 if x > 0 else None)
df_test = df.merge(df, how='left',indicator=False,left_on=['id','yr'],right_on=['id','last_year'])
我知道有更好的方法可以做到這一點,但是我不確定這是什么。 你能幫我嗎?
您可以使用shift
df['New']=df.sort_values(['id','yr']).groupby('id').data.shift()
df
Out[793]:
data id yr New
0 1-87 1 87 NaN
1 1-88 1 88 1-87
2 1-89 1 89 1-88
3 2-54 2 54 2-53
4 2-55 2 55 2-54
5 2-53 2 53 NaN
6 3-87 3 87 NaN
7 4-87 4 87 4-86
8 5-89 5 89 NaN
9 3-90 3 90 3-87
10 3-91 3 91 3-90
11 3-92 3 92 3-91
12 4-86 4 86 NaN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.