gpt4 book ai didi

python - 优化 "group by"并保持最大值或最小值 - MySQL/Python

转载 作者:行者123 更新时间:2023-11-29 19:30:08 27 4
gpt4 key购买 nike

Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz
8,00Gb RAM
Windows 7 Enterprise SP1 - 64-bit
MySQL Workbench Community (GPL) for Windows version 6.3.8 CE build 1228 (64 bit)
Python v3.5 (PyCharm)
PyMySQL v0.7.9
Pandas v0.18.1
<小时/>

大家好,

我有一个像这样的表“测试”,大约有 350 万行,我希望使用最大或最小日期作为条件来获取对数字进行分组的行。结果进入 python 中的 DataFrame 结构。

id  num  name  dates
'1' '1' 'A' '2017-01-02'
'2' '1' 'B' '2016-01-02'
'3' '2' 'C' '2016-01-01'
'4' '2' 'C' '2017-10-01'
'5' '3' 'C' '2012-10-01'
'6' '3' 'C' '2011-10-01'

结果 - 最低标准:

id   num  name  dates
'2' '1' 'B' '2016-01-02'
'3' '2' 'C' '2016-01-01'
'6' '3' 'C' '2011-10-01'

这是查询:

SELECT t.*
FROM (
SELECT num, min(dates) AS max_dates
FROM test
GROUP BY num
) AS m
INNER JOIN test AS t
ON t.num = m.num
AND t.dates= m.max_dates

目前在 python 中运行大约需要 190 秒:

import pymysql as db
import pandas as pd

connection=db.connect('localhost', user=user_db,passwd=pass,db='project', use_unicode=True, charset="utf8")

test = pd.read_sql_query(QUERY, connection)

有什么方法可以优化此查询和/或导入到 python 中的数据帧吗?

作为一个一般性问题:将表从 MySQL 导入到 Python 还有其他好的(快速)做法吗?

谢谢!!

最佳答案

我建议像这样编写查询:

SELECT t.*
FROM test t
WHERE t.date = (SELECT MAX(dates) -- or MIN()
FROM test t2
WHERE t2.num = t.num
);

然后,您需要在 test(num,dates)test(dates) 上建立索引。

关于python - 优化 "group by"并保持最大值或最小值 - MySQL/Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41842851/

27 4 0
文章推荐: java - 使用spring工具套件中的jpa工具生成涉及外键和复合主键的实体后​​运行服务器时出现异常
文章推荐: javascript - 防止 Angular $httpProvider 拦截器在模板加载时触发
文章推荐: android - List 而不是一个类 GSON 中的多个对象