Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用条件(现有列上的最大日期和==条件)创建新列_Python_Pandas - Fatal编程技术网

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