如何在df.groupby()之后获得最后的'n‘组,并将它们合并成一个数据帧。
data = pd.read_sql_query(sql=sqlstr, con=sql_conn, index_col='SampleTime')
grouped = data.groupby(data.index.date,sort=False)在做了grouped.ngroups之后,我得到了277个组的总数。我想把最后12个组合并起来,生成一个数据帧。
发布于 2018-10-19 15:47:07
熊猫GroupBy对象是可迭代的。要提取可迭代的最后n个元素,通常不需要从可迭代的元素中创建一个列表并对最后n个元素进行切片。这将是内存昂贵的。
相反,您可以使用itertools.islice (按@mtraceur的建议)或使用collections.deque。两者都是在O(n)时间内工作的。
与生成器不同,Pandas GroupBy对象是可重用的可迭代对象。因此,您可以通过len(g)为GroupBy对象g计算组数,然后通过islice对g进行切片。或者,也许更习惯,您可以使用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))或者,您可以使用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))如collections文档中所述:
一旦有界长度
deque满了,当添加新项时,相应数量的项将从另一端丢弃.它们还可用于跟踪事务和其他数据池,在这些数据池中,只有最近的活动才感兴趣。
发布于 2018-10-19 15:22:56
假设您知道grouped的顺序
grouped = zip(*df.groupby(data.index.date,sort=False))
pd.concat(list(grouped)[1][-12:])发布于 2018-10-19 15:18:49
在列表理解和pd.concat上使用groupby.get_group
pd.concat([grouped.get_group(x) for x in list(grouped.groups.keys())[-12:]])https://stackoverflow.com/questions/52895305
复制相似问题