根据熊猫中其他列的条件更改列值

时间:2019-07-23 21:17:40

标签: python pandas

我想根据条件和其他列中值的比较来更改数据框中第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的年值。

有人可以建议一段代码吗?

谢谢!

1 个答案:

答案 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