栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在熊猫数据框中查找连续的片段

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在熊猫数据框中查找连续的片段

单线:

df.reset_index().groupby('A')['index'].apply(np.array)

代码例如:

In [1]: import numpy as npIn [2]: from pandas import *In [3]: df = Dataframe([3]*4+[4]*4+[1]*4, columns=['A'])In [4]: dfOut[4]:    A0   31   32   33   34   45   46   47   48   19   110  111  1In [5]: df.reset_index().groupby('A')['index'].apply(np.array)Out[5]:A1    [8, 9, 10, 11]3      [0, 1, 2, 3]4      [4, 5, 6, 7]

您还可以直接从groupby对象访问信息:

In [1]: grp = df.groupby('A')In [2]: grp.indicesOut[2]:{1L: array([ 8,  9, 10, 11], dtype=int64), 3L: array([0, 1, 2, 3], dtype=int64), 4L: array([4, 5, 6, 7], dtype=int64)}In [3]: grp.indices[3]Out[3]: array([0, 1, 2, 3], dtype=int64)

要解决DSM提到的情况,您可以执行以下操作:

In [1]: df['block'] = (df.A.shift(1) != df.A).astype(int).cumsum()In [2]: dfOut[2]:    A  block0   3      11   3      12   3      13   3      14   4      25   4      26   4      27   4      28   1      39   1      310  1      311  1      312  3      413  3      414  3      415  3      4

现在,将这两列进行分组并应用lambda函数:

In [77]: df.reset_index().groupby(['A','block'])['index'].apply(np.array)Out[77]:A  block1  3          [8, 9, 10, 11]3  1 [0, 1, 2, 3]   4        [12, 13, 14, 15]4  2 [4, 5, 6, 7]


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637943.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号