2017-04-06 77 views
1

熊猫df有问题,试图根据日期获取“计数”列,代码应在日期列中搜索“日期范围”,如果存在应将“计数”复制到相应日期的“帖子”列中 例如:date_range value = 16/02/2017 - 代码在“日期”列中搜索16/02/2017,并使“帖子”等于“伯爵”是日期的价值 - 如果DATE_RANGE值没有出现 - 职位应= 0基于日期的Python VLOOKUP - 熊猫

数据举例:

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 

然而,这使得数据映射到“信息”

希望我正确解释这个错误的值!先谢谢您的帮助!

回答

1

你可以先匹配值创建dict然后map通过date_range柱:

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 
+0

感谢这个,运行这个时候但是字典d似乎是空的,尽管有跨2列是显而易见的比赛 – J3319

+0

空?这意味着没有匹配? – jezrael

+0

确切地说,但不知道为什么它看不到匹配,因为有一些我可以看到当打印df – J3319