3

您好,尝试合并两个数据框并按日期和 upc 汇总访问计数。

  1. 交易数据(日期、upc、销售) 200k 行 x 3 列
  2. 访问次数(日期、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, 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
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 包是否是我需要使用的。任何帮助表示赞赏

4

1 回答 1

4

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

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

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

df3 = pd.merge(df1, df2_sum, on=["Date", "upc"], how="left")
于 2017-12-30T06:29:52.613 回答