sto*_*ade 12 python pandas pandas-groupby
如何获取最后的'n'组df.groupby()并将它们组合为数据帧.
data = pd.read_sql_query(sql=sqlstr, con=sql_conn, index_col='SampleTime')
grouped = data.groupby(data.index.date,sort=False)
Run Code Online (Sandbox Code Playgroud)
在grouped.ngroups我做了我获得组277的总数.我想结合最后12组并生成数据帧.
Pandas GroupBy对象是可迭代的.要提取iterable 的最后n个元素,通常不需要从iterable创建列表并切片最后n个元素.这将是内存昂贵的.
相反,您可以使用itertools.islice(如@mtraceur所建议的)或collections.deque.两者都在O(n)时间内工作.
itertools.islice与生成器不同,Pandas GroupBy对象是可重用的可迭代对象.因此,可以计算出通过基团的数目len(g)为一个GroupBy对象g,然后切片g通过islice.或者,也许更惯用,你可以使用GroupBy.ngroups.然后使用pd.concat连接可迭代的数据帧:
from operator import itemgetter
g = data.groupby(data.index.date, sort=False)
res = pd.concat(islice(map(itemgetter(1), g), max(0, g.ngroups-12), None))
Run Code Online (Sandbox Code Playgroud)
collections.deque或者,您可以使用collections.deque和指定maxlen,然后像以前一样连接.
from collections import deque
grouped = data.groupby(data.index.date, sort=False)
res = pd.concat(deque(map(itemgetter(1), grouped), maxlen=12))
Run Code Online (Sandbox Code Playgroud)
如collections文档中所述:
一旦有限长度
deque已满,当添加新项目时,相对数量的项目将从相对端丢弃....它们对于跟踪仅涉及最近活动的交易和其他数据池也很有用.