pandas panda Dataframe 中基于上一行的增量年

ne5o7dgx  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(157)

如果我有一个像下面这样的Pandas数据框,有没有办法自动改变年份,这样如果一行中的日期在前一行中的日期之前,年份就会增加。看起来这个解决方案可能需要递归。

old_value     new_value
0     2022-11-10    2022-11-10
1     2022-12-11    2022-12-11
2     2022-01-10    2023-01-10
3     2022-01-20    2023-01-20
4     2022-01-01    2024-01-01
cqoc49vn

cqoc49vn1#

如果不太像0,您可以将以前的行的差异与组的累计总和进行比较,然后在列表理解中添加年份:

g = df['old_value'].diff().lt('0 min').cumsum()

df['new_value'] = [a + pd.DateOffset(years=y) for a, y in zip(df['old_value'], g)]
print (df)
   old_value  new_value
0 2022-11-10 2022-11-10
1 2022-12-11 2022-12-11
2 2022-01-10 2023-01-10
3 2022-01-20 2023-01-20
4 2022-01-01 2024-01-01

另一个想法是在lambda函数中使用GroupBy.transform添加每组的年数:

g = df['old_value'].diff().lt('0 min').cumsum()

f = lambda x: x + pd.DateOffset(years=x.name)
df['new_value'] = df.groupby(g)['old_value'].transform(f)
print (df)
   old_value  new_value
0 2022-11-10 2022-11-10
1 2022-12-11 2022-12-11
2 2022-01-10 2023-01-10
3 2022-01-20 2023-01-20
4 2022-01-01 2024-01-01

相关问题