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

内插(或外推)熊猫数据框中的小间隙

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

内插(或外推)熊猫数据框中的小间隙

因此,这里有一个面具可以解决这个问题。只需

interpolate
然后应用蒙版将适当的值重置为NaN。老实说,这比我意识到的工作要多得多,因为我不得不遍历每列,但是如果没有我提供一些像“
ones”这样的虚拟列,groupby就无法工作。

无论如何,我可以解释是否有任何不清楚的地方,但实际上只有几行很难理解。有关更多信息,请参见此处,以获取更多有关该技巧的解释,

df['new']
或者仅打印出单独的一行以更好地了解发生了什么。

mask = data.copy()for i in list('abcdefgh'):    df = pd.Dataframe( data[i] )    df['new'] = ((df.notnull() != df.shift().notnull()).cumsum())    df['ones'] = 1    mask[i] = (df.groupby('new')['ones'].transform('count') < 5) | data[i].notnull()In [7]: dataOut[7]:    a      b      c   d       e       f       g       h2014-02-21 14:50:00  123.5  433.5  123.5 NaN     NaN     NaN  2330.3  2330.32014-02-21 14:51:00    NaN  523.2  132.3 NaN     NaN     NaN     NaN     NaN2014-02-21 14:52:00  136.3  536.3  136.3 NaN     NaN     NaN     NaN     NaN2014-02-21 14:53:00  164.3  464.3  164.3 NaN     NaN     NaN     NaN     NaN2014-02-21 14:54:00  213.0  413.0    NaN NaN     NaN  2763.0     NaN     NaN2014-02-21 14:55:00  164.3  164.3    NaN NaN     NaN  2142.3     NaN     NaN2014-02-21 14:56:00  213.0  213.0    NaN NaN     NaN  2127.3     NaN     NaN2014-02-21 14:57:00  221.1  221.1    NaN NaN  2330.3  2330.3     NaN  2777.7In [8]: maskOut[8]:   a     b     c      d      e     f      g      h2014-02-21 14:50:00  True  True  True  False  False  True   True   True2014-02-21 14:51:00  True  True  True  False  False  True  False  False2014-02-21 14:52:00  True  True  True  False  False  True  False  False2014-02-21 14:53:00  True  True  True  False  False  True  False  False2014-02-21 14:54:00  True  True  True  False  False  True  False  False2014-02-21 14:55:00  True  True  True  False  False  True  False  False2014-02-21 14:56:00  True  True  True  False  False  True  False  False2014-02-21 14:57:00  True  True  True  False   True  True  False   True

如果您对推断没有任何幻想,那么从那里开始很容易:

In [9]: data.interpolate().bfill()[mask]Out[9]:    a      b      c   d       e       f       g       h2014-02-21 14:50:00  123.5  433.5  123.5 NaN     NaN  2763.0  2330.3  2330.32014-02-21 14:51:00  129.9  523.2  132.3 NaN     NaN  2763.0     NaN     NaN2014-02-21 14:52:00  136.3  536.3  136.3 NaN     NaN  2763.0     NaN     NaN2014-02-21 14:53:00  164.3  464.3  164.3 NaN     NaN  2763.0     NaN     NaN2014-02-21 14:54:00  213.0  413.0  164.3 NaN     NaN  2763.0     NaN     NaN2014-02-21 14:55:00  164.3  164.3  164.3 NaN     NaN  2142.3     NaN     NaN2014-02-21 14:56:00  213.0  213.0  164.3 NaN     NaN  2127.3     NaN     NaN2014-02-21 14:57:00  221.1  221.1  164.3 NaN  2330.3  2330.3     NaN  2777.7

编辑添加: 通过将一些内容移出循环,这是一种更快的方法(此示例数据的大约两倍),并且稍微简单一些:

mask = data.copy()grp = ((mask.notnull() != mask.shift().notnull()).cumsum())grp['ones'] = 1for i in list('abcdefgh'):    mask[i] = (grp.groupby(i)['ones'].transform('count') < 5) | data[i].notnull()


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

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

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