Pandas使用日期和另一列合并在两列上

时间:2017-12-30 06:00:48

标签: python pandas pandasql

Hello尝试合并两个数据帧并按日期和upc总和访问次数。

  1. 交易数据(日期,upc,销售)200k行x 3列
  2. 访问次数(日期,upc,访问次数)200万+行x 3列
  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, left_on = [date,upc], right_on [date,upc] how = left)
    

    这不起作用。

    我也试过

    df3 = pandas.merge(df1,df2, on = [date], how = left)
    

    并且我一直返回错误消息。根据错误消息,我看起来需要将数据框中的一个日期转换为pandas dtype。

    我做了那个改变并返回了与我第一次尝试相同的结果。合并有效,但没有总结结果。我尝试将两个数据框中的两个日期都转换为astype(str),但这不起作用。我了解到两个日期是否具有相同的日期格式dtype或astype(str)我返回内存错误消息。合并会失败。

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

    我需要的是与excel中的sumif函数类似的东西。

    我需要通过汇总每个upc每天的总访问次数并保持事务数据不变或按照sql的方式保持连接来组合这两个数据集

    示例数据

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

    想知道pandasql包是否是我需要使用的。任何帮助表示赞赏

1 个答案:

答案 0 :(得分:1)

你执行的第一个合并声明应该让你到达中途,但不幸的是,这是两个步骤的后半部分。听起来您希望在按Date / upc对访问进行汇总后,将销售数据合并到访问数据上。实际上你必须先做一个总和(merge命令本身不会这样做)。尝试:

df2_sum = df2.groupby(["Date", "upc"])["visits"].sum().reset_index()

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

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