Python 熊猫使用日期和另一列在两列上合并

Python 熊猫使用日期和另一列在两列上合并,python,pandas,pandasql,Python,Pandas,Pandasql,您好,正在尝试合并两个数据帧,并按日期和upc求访问次数之和 交易数据(日期、upc、销售额)200k行x 3列 访问次数(日期、upc、访问次数)200多万行x 3列 我试过这个 df3 = pandas.merge(df1,df2, on = ['upc','date'], how = 'left') 结果:执行合并,但不按日期或upc求和 我也试过了 df3 = pandas.merge(df1,df2, left_on = ['date'], right_on ['upc'] how

您好,正在尝试合并两个数据帧,并按日期和upc求访问次数之和

  • 交易数据(日期、upc、销售额)200k行x 3列
  • 访问次数(日期、upc、访问次数)200多万行x 3列
  • 我试过这个

    df3 = pandas.merge(df1,df2, on = ['upc','date'], how = 'left') 
    
    结果:执行合并,但不按日期或upc求和

    我也试过了

    df3 = pandas.merge(df1,df2, left_on = ['date'], right_on ['upc'] how = 'left')
    
    df3 = pandas.merge(df1,df2, on = ['date'], how = 'left')
    
    但那没用

    df3 = pandas.merge(df1,df2, left_on = ['date','upc'], right_on ['date','upc'] how = 'left')
    
    但那没用

    我也试过了

    df3 = pandas.merge(df1,df2, left_on = ['date'], right_on ['upc'] how = 'left')
    
    df3 = pandas.merge(df1,df2, on = ['date'], how = 'left')
    
    我不断地返回一条错误消息。根据错误消息,看起来我需要将数据帧中的一个日期转换为数据类型

    我做了更改,并返回了与第一次尝试相同的结果。合并成功了,但没有总结结果。我尝试将两个数据帧中的两个日期都转换为
    astype(str)
    ,但没有成功。我了解到,如果两个日期都具有相同的日期格式dtype或
    astype(str)
    我将返回一条内存错误消息。合并将失败

    我成功地仅使用upc进行合并,但这会在我的数据中产生问题,我返回重复的就诊号码,因为由于日期列,upc在事务中重复

    最后,我需要的是类似于excel中的sumif函数的东西

    我需要通过汇总每个upc每天的总访问量,并保持事务数据不变或以sql形式保留连接,来组合这两个数据集

    样本数据

    df1
      Date         upc       sales
    0 09/01/2016   A01234    1000
    1 09/02/2016   A01234    500
    2 09/10/2016   A56789    1200
    
    df2
      Date         upc         visits
    0 09/01/2016   A01234      10
    1 09/02/2016   A01234      25
    2 09/05/2016   A56789      26
    3 09/10/2016   A56789      32
    
    
    df3
      Date         upc       sales   visits
    0 09/01/2016   A01234    1000    10
    1 09/02/2016   A01234    500     25
    2 09/10/2016   A56789    1200    32
    

    想知道我是否需要使用pandasql包。感谢您提供的任何帮助

    您执行的第一个合并语句应该可以让您完成一半,但不幸的是,这是两步过程的后半部分。听起来您希望在按日期/upc对访问进行求和后,将销售数据合并到访问数据中。实际上,您必须先进行求和(
    merge
    命令本身并不这样做)。尝试:

    然后左键将其合并到销售数据中:

    df3 = pd.merge(df1, df2_sum, on=["Date", "upc"], how="left")
    

    一个简单的
    df1.merge(df2,on=['Date','upc'])
    可以工作,不是吗?访问数据已经汇总。这是一个来自大查询的qry,每天和每次访问的upc的输出访问计数。groupby如何更改格式?Hi PaSTE我尝试了第二种方法,脚本运行了,但输出没有成功。“访问”列合并,但该列为空。没有值。所以我使用pandasql找到了一个解决方案。使用GROUPBY子句组合数据和求和值是有效的。为了添加更多注释,问题在于日期。不是百分之百确定原因,但当您将两个dfs的两个日期都转换为panda date time,然后使用pandasql时,合并将起作用,访问的值将汇总。唯一需要注意的是输出,合并表后,日期字段显示00:00:00的日期和时间戳。Excel很容易将其转换为日期。我只是想记下这一点,看看是否有人知道如何操纵日期,以便以简单的日期格式输出,即2016年2月9日