簡體   English   中英

Python Pandas對先前數據進行自我合並

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM