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
目前大约需要190秒才能在python中运行:
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的任何其他好的(快速)实践?
谢谢!
答案 0 :(得分:0)
我建议像这样编写查询:
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)
上的索引。