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