我想根据条件和其他列中值的比较来更改数据框中第1列中的值。
这是原始数据帧:
start end diff
0 2016-05-08 unknown 3
1 2016-05-08 2017-09-08 5
2 2018-09-01 2017-09-01 5
这是我想要的数据框:
start end diff
0 2016-05-08 unknown 3
1 2016-05-08 2017-09-08 1
2 2018-09-01 2017-09-01 -1
基本上,如果end未知,我希望diff列中的值保持不变,否则,我希望它是end的年值-start的年值。
有人可以建议一段代码吗?
谢谢!
答案 0 :(得分:1)
这是使用np.where
的一种方法,在通过使用to_datetime
转换数据时间之后。另外,请不要使用内置函数名称来命名列:diff,sum,min,max和cumsum。
df.start=pd.to_datetime(df.start)
df.end=pd.to_datetime(df.end,errors = 'coerce')
df['diff']=np.where(df.end.isnull(),df['diff'],df.end.dt.year-df.start.dt.year)
df
Out[135]:
start end diff
0 2016-05-08 NaT 3.0
1 2016-05-08 2017-09-08 1.0
2 2018-09-01 2017-09-01 -1.0