使用where语句更新datafram

2024-09-30 16:29:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧(currentQuarter),看起来像

  CODE  SIP  ...                 STATUS  STATUS_CHANGE_DATE
0   AA  YES  ...                CURRENT          2019-01-01
1   AA  YES  ...                 LEAVER          2019-02-05
2   AA  YES  ...                 LEAVER          2019-09-03
3   AA  YES  ...                 JOINER          2019-01-05
4   AA  YES  ...                CURRENT          2019-03-08

我正在尝试将任何记录的STATUS更改为CURRENT,其中STATUS不是CURRENT,而STATUS_CHANGE_DATE是在将来。因此在本例中,referencePeriodStartDate是2019-07-25。这意味着第三个记录STATUS字段将更改为CURRENT

  CODE  SIP  ...                 STATUS  STATUS_CHANGE_DATE
0   AA  YES  ...                CURRENT          2019-01-01
1   AA  YES  ...                 LEAVER          2019-02-05
2   AA  YES  ...                CURRENT          2019-09-03
3   AA  YES  ...                 JOINER          2019-01-05
4   AA  YES  ...                CURRENT          2019-03-08

我可以过滤df来创建查询来查找记录,但是我无法获得where语句来更改受影响的记录

referencePeriodStartDate = datetime.datetime.strptime(referenceDate , '%d/%m/%Y')
    not_current = currentQuarter['STATUS'].isin(leaverList) 
    currentQuarter['STATUS_CHANGE_DATE'] = pd.to_datetime(currentQuarter['STATUS_CHANGE_DATE'], errors='coerce')
    currentQuarter['STATUS_CHANGE_DATE'].dt.strftime('%d/%m/%Y') 
    referenceError = currentQuarter['STATUS_CHANGE_DATE'] > referencePeriodStartDate


currentQuarter['STATUS'] = np.where(not_current & referenceError, "CURRENT", currentQuarter['STATUS'])

如果有人能给我一个关于where语句的指针,我将不胜感激

谢谢


Tags: datetimedatestatus记录codecurrentwherechange
1条回答
网友
1楼 · 发布于 2024-09-30 16:29:38

您可以检查STATUS_CHANGE_DATE中哪些日期大于今天的日期,并使用结果对数据帧进行索引,并相应地将STATUS设置为CURRRENT

df['STATUS_CHANGE_DATE'] = pd.to_datetime(df.STATUS_CHANGE_DATE)
df.loc[df.STATUS_CHANGE_DATE.gt(referencePeriodStartDate), 'STATUS'] = 'CURRENT'

   CODE  SIP   STATUS STATUS_CHANGE_DATE
0   AA  YES  CURRENT         2019-01-01
1   AA  YES   LEAVER         2019-02-05
2   AA  YES  CURRENT         2019-09-03
3   AA  YES   JOINER         2019-01-05
4   AA  YES  CURRENT         2019-03-08

相关问题 更多 >