Python 使用条件(现有列上的最大日期和==条件)创建新列
我有一个包含以下数据的数据框:Python 使用条件(现有列上的最大日期和==条件)创建新列,python,pandas,Python,Pandas,我有一个包含以下数据的数据框: id|invoice_no|invoice_date|change_previous_month|change_status 984974|110|2016-12-31|0|A 984974|8202|2017-01-30|-64864|D 115677|5505|2016-12-31|0|A 115677|5635|2017-01-30|58730|U 我想根据现有列上的条件,从“发票数据”创建一个新列“事件日期”。 条件是: 1) 选择定义为最新日期
id|invoice_no|invoice_date|change_previous_month|change_status
984974|110|2016-12-31|0|A
984974|8202|2017-01-30|-64864|D
115677|5505|2016-12-31|0|A
115677|5635|2017-01-30|58730|U
我想根据现有列上的条件,从“发票数据”创建一个新列“事件日期”。
条件是:
1) 选择定义为最新日期的最大“发票日期”,然后
2) 选择“更改状态”,其中“更改状态”==“A”或“更改状态”==“U”
生成的数据帧应如下所示:
id|invoice_no|invoice_date|change_previous_month|change_status|event_date
984974|110|2016-12-31|0|A|2016-12-31
984974|8202|2017-01-30|-64864|D|2016-12-31
115677|5505|2016-11-31|0|A|2017-01-30
115677|5635|2017-01-30|58730|U|2017-01-30
事件日期应根据发票日期创建,并满足上述两个条件,提前感谢您的帮助。我认为您需要:
- 先过滤
- 按列
invoice\u date
- 每
id的最后一行
- 用于创建
系列
- 按
到新列id
s = (df[df['change_status'].isin(['A','U'])]
.sort_values('invoice_date')
.drop_duplicates('id', keep='last')
.set_index('id')['invoice_date'])
df['event_date'] = df['id'].map(s)
print (df)
id invoice_no invoice_date change_previous_month change_status \
0 984974 110 2016-12-31 0 A
1 984974 8202 2017-01-30 -64864 D
2 115677 5505 2016-12-31 0 A
3 115677 5635 2017-01-30 58730 U
event_date
0 2016-12-31
1 2016-12-31
2 2017-01-30
3 2017-01-30