gpt4 book ai didi

python - 根据使用 Pandas 的条件动态改变日期

转载 作者:行者123 更新时间:2023-12-03 23:06:26 25 4
gpt4 key购买 nike

我有一个如下所示的数据框

df1 = pd.DataFrame({'person_id': [11, 21, 31, 41, 51],
'date_1': ['12/30/1961', '05/29/1967', '02/03/1957', '7/27/1959', '01/13/1971'],
'backward': [0,120,1,2,3],
'forward': [0,12,1,0,0]})
df1['date_1'] = pd.to_datetime(df1['date_1'])

我想做的是

1) 向前移动 date_1基于来自 forward 的值的列列(添加日期)。

2) 如果 forward列的值为 0 ,然后从 backward 中选择值并移动日期 backward (减去日期)

3) 如果两者都是 forwardbackward0 ,它不会对我们的日期产生任何影响 add/subtract 0 days to date .出于编码目的,如果您仍然想知道选择哪一列,那么我们可以考虑 backward柱子。

这是我试过的
df1['new_date'] = df1['date_1'].sub(pd.to_timedelta(df1['forward'],unit='d'))
df1['bool'] = df1['date_1'].eq(df1['new_date']) # i do this to find out which rows aren't changed. So I can look at backward column to subtract days for these records
df1.loc[df1.bool == True, "new_date"] = df1['date_1'].sub(pd.to_timedelta(df1['backward'],unit='d'))

我希望我的输出如下所示。正如您在最后两行和第一行中看到的, forward列的值为 0,因此我们从 backward 中选取值列和 subtract the dates
enter image description here

最佳答案

您可以使用 mask在 forward 上用减后向列替换 0,然后添加 to_timedelta这个系列到今天

df1['new_date'] = (df1['date_1'] 
+ pd.to_timedelta(df1['forward'].mask(lambda x: x.eq(0),
-df1['backward']),
unit='d')
)
print (df1)
person_id date_1 backward forward new_date
0 11 1961-12-30 0 0 1961-12-30
1 21 1967-05-29 120 12 1967-06-10
2 31 1957-02-03 1 1 1957-02-04
3 41 1959-07-27 2 0 1959-07-25
4 51 1971-01-13 3 0 1971-01-10

关于python - 根据使用 Pandas 的条件动态改变日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62452431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com