我有这个 df:d={'year':[2019,2018,2017],'B':[10,5,17]}df=pd.DataFrame(data=d)print(df): year B0 2019 101 2018 52 2017 17我想创建一个列“B_previous_year”,从前一年获取 B 数据,其方式如下所示: year B B_previous_year0 2019 10 51 2018 5 172 2017 17 NaN我正在尝试这个:df['B_previous_year']=df.B.loc[df.year == (df.year - 1)]然而我B_previous_year已经满了NaN year B B_previous_year0 2019 10 NaN1 2018 5 NaN2 2017 17 NaN我怎么能那样做?
2 回答
猛跑小猪
TA贡献1858条经验 获得超8个赞
如果您想保留整数格式:
df = df.convert_dtypes()
df['New'] = df.B.shift(-1)
df
输出:
year B New
0 2019 10 5
1 2018 5 17
2 2017 17 <NA>
蝴蝶不菲
TA贡献1810条经验 获得超4个赞
您可能想先按年份对数据框进行排序,然后验证一行与下一行的差异确实是一年:
df = df.sort_values(by='year')
df['B_previous_year'] = df[df.year.diff() == 1]['B']
year B B_previous_year
2 2017 17 NaN
1 2018 5 5.0
0 2019 10 10.0
添加回答
举报
0/150
提交
取消