【问题标题】:Python VLOOKUP based on dates - Pandas基于日期的 Python VLOOKUP - Pandas
【发布时间】:2017-04-06 23:07:35
【问题描述】:

pandas df 存在问题,尝试根据日期获取“计数”列,代码应在日期列中搜索“日期范围”,如果存在,则应复制“计数”进入相应日期的“帖子”列 例如:date_range 值 = 16/02/2017 - 代码在“日期”列中搜索 16/02/2017,并使“帖子”等于该日期的“计数”值 - 如果没有出现 date_range 值 - 帖子应该= 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

但是,这会使数据将错误的值映射到“帖子”

希望我正确地解释了这一点!提前感谢您的帮助!

【问题讨论】:

    标签: python excel pandas dataframe membership


    【解决方案1】:

    您可以先为匹配值创建dict,然后通过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
    

    【讨论】:

    • 感谢您,但在运行此命令时,字典 d 似乎为空,尽管两列之间存在明显的匹配项
    • 空了?这意味着没有匹配?
    • 完全正确,但不确定为什么它看不到匹配项,因为在打印 df 时我可以看到一些匹配项
    • print (df.info()) 是什么?
    • Int64Index:108 个条目,0 到 107 数据列(共 4 列):日期 83 非空对象计数 83 非空 float64 date_range 108非空对象 发布 108 个非空 int32 数据类型:float64(1)、int32(1)、object(2) 内存使用量:3.8+ KB 无
    猜你喜欢
    • 1970-01-01
    • 2019-02-05
    • 2021-03-27
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 2019-07-12
    相关资源
    最近更新 更多