Python 使用where语句更新数据帧

Python 使用where语句更新数据帧,python,pandas,Python,Pandas,我有一个数据帧(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

我有一个数据帧(
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
我正在尝试将任何记录的
状态
更改为
当前
,其中
状态
不是
当前
,而
状态(更改)日期
在未来。因此,在本例中,
referencePeriodStartDate
为2019-07-25。这意味着第三条记录的
状态
字段将更改为
当前

  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'])

您可以检查
STATUS\u CHANGE\u DATE
中的哪些日期大于今天的日期,并使用结果索引数据帧,并相应地将
STATUS
设置为
current

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

您可以检查
STATUS\u CHANGE\u DATE
中的哪些日期大于今天的日期,并使用结果索引数据帧,并相应地将
STATUS
设置为
current

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