【发布时间】:2016-04-19 15:59:16
【问题描述】:
注意:除了大型连接之外,还寻求一些有效方法的帮助,然后计算日期之间的差异
我有 table1 带有国家 ID 和日期(这些值没有重复),我想总结 table2 信息(其中有国家、日期、cluster_x 和一个计数变量,其中 cluster_x 是 cluster_1、cluster_2、 cluster_3) 以便table1 附加了集群 ID 的每个值和来自table2 的汇总计数,其中来自table2 的日期发生在table1 的日期之前的30 天内。
我相信这在 SQL 中很简单:如何在 Pandas 中做到这一点?
select a.date,a.country,
sum(case when a.date - b.date between 1 and 30 then b.cluster_1 else 0 end) as cluster1,
sum(case when a.date - b.date between 1 and 30 then b.cluster_2 else 0 end) as cluster2,
sum(case when a.date - b.date between 1 and 30 then b.cluster_3 else 0 end) as cluster3
from table1 a
left outer join table2 b
on a.country=b.country
group by a.date,a.country
编辑:
这是一个稍有改动的示例。假设这是 table1,一个包含日期、城市、集群和计数的聚合数据集。下面是“查询”数据集(表 2)。在这种情况下,只要 table1 中的 date 字段在 30 天前,我们希望将 table1 中的 count 字段与 cluster1、cluster2、cluster3 (实际上有 100 个)对应的国家 id 相加。
例如,查询数据集的第一行的日期为 2/2/2015 和国家/地区 1。在表 1 中,只有 30 天前的一行,它适用于计数为 2 的集群 2。
这是 CSV 中两个表的转储:
date,country,cluster,count
2014-01-30,1,1,1
2015-02-03,1,1,3
2015-01-30,1,2,2
2015-04-15,1,2,5
2015-03-01,2,1,6
2015-07-01,2,2,4
2015-01-31,2,3,8
2015-01-21,2,1,2
2015-01-21,2,1,3
和表2:
date,country
2015-02-01,1
2015-04-21,1
2015-02-21,2
【问题讨论】:
-
能否请您发布示例输入数据集(CSV/dict/JSON/Python代码格式作为文本的5-7行,所以我们编码时可以使用它)? How to create a Minimal, Complete, and Verifiable example
-
现在好多了,但是你改变了算法——你想把
cluster_X和table2相加还是count和table1相加?您能否也发布所需的输出? -
这里是SQLFiddle,您可以在其中使用 SQL 开发所需的结果,并在此处发布链接(包含所需的 SQL)。 PS我使用this service从CSV生成SQL
-
所需的输出是表(cluster_1....cluster_3)值的底部结果。它是计数变量的总和。我想我实际上有一个可行的方法.....但是它很慢。
-
日期范围重叠怎么办?例如,如果您将
[2015-02-02, 1]添加到table2,您的结果集将如何显示