基于date的Python VLOOKUP – Pandas

在pandas df中有一个问题,试图根据date获取“Count”列,代码应该在date列中search“date范围”,如果存在,则应将“Count”复制到“相应date的“post”列,例如:date_range value = 16/02/2017 – 代码在“date”列中search16/02/2017,并使“post”等于该date的“计数”值 – 如果date范围价值不出现 – 职位应= 0。

数据示例:

Dates Count date_range Posts 0 07/02/2017 1 16/12/2016 (should = 5) 1 01/03/2017 1 17/12/2016 2 15/02/2017 1 18/12/2016 3 23/01/2017 1 19/12/2016 4 28/02/2017 1 20/12/2016 5 09/02/2017 2 21/12/2016 6 20/03/2017 2 22/12/2016 7 16/12/2016 5 

我的代码如下所示:

  DateList = df['Dates'].tolist() for date in df['date_range']: if str(date) in DateList: df['Posts'] = df['Count'] else: dates_df['Posts'] = 0 

但是,这使得数据映射错误的值为“Posts”

希望我解释正确! 先谢谢您的帮助!

您可以先为匹配的值创builddict ,然后date_range列进行map

 print (df) Dates Count date_range 0 07/02/2017 1 16/12/2016 1 01/03/2017 1 17/12/2016 2 15/02/2017 1 18/12/2016 3 23/01/2017 1 19/12/2016 4 28/02/2017 1 07/02/2017 <-change value for match 5 09/02/2017 2 21/12/2016 6 20/03/2017 2 22/12/2016 7 16/12/2016 5 22/12/2016 d = df[df['Dates'].isin(df.date_range)].set_index('Dates')['Count'].to_dict() print (d) {'16/12/2016': 5, '07/02/2017': 1} df['Posts'] = df['date_range'].map(d).fillna(0).astype(int) print (df) Dates Count date_range Posts 0 07/02/2017 1 16/12/2016 5 1 01/03/2017 1 17/12/2016 0 2 15/02/2017 1 18/12/2016 0 3 23/01/2017 1 19/12/2016 0 4 28/02/2017 1 07/02/2017 1 5 09/02/2017 2 21/12/2016 0 6 20/03/2017 2 22/12/2016 0 7 16/12/2016 5 22/12/2016 0 
Interesting Posts