【发布时间】:2017-01-25 03:22:31
【问题描述】:
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'
结果 - min 标准:
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 的任何其他好的(快速)做法?
谢谢!!
【问题讨论】:
-
在
test (num, dates)上创建索引有帮助吗? -
在我执行的两项测试中快了 12%。不确定是否是由于索引。 (大约 20 多岁的差异)我将不得不在更大的桌子上尝试。还是谢谢你!
标签: python mysql pandas group-by