Pandas数据帧.groupby有公差的

2024-09-27 23:15:31 发布

您现在位置:Python中文网/ 问答频道 /正文

给出以下一些数据:

data = {'Object': ['objA', 'objB', 'objC', 'objD', 'objE'],
        'Length': [10.1, 10.02, 7.4, 6.24, 5.99]}

df = pd.DataFrame(data)
df

这将导致以下数据帧:

^{pr2}$

我想根据+-公差将“长度”列分组。这样做会给我以下几组。类似于下面的psuedo代码

tolerance = .25
grouped = df.groupby(df['Length'] +- tolerance)

这将产生类似于下面的分组:

{(10.10+-.25): [0L, 1L],
 (7.40+-.25):  [2L],
 (6.24+-.25):  [3L, 4L]}

环顾四周,人们建议使用pd.切割然而,鉴于数据集的真实大小和长度的可变性,预先计算仓位范围似乎有点像是一种强力解决方案。有没有人有更优雅/快速/熊猫/纽比式的解决方案?在


Tags: 数据dataframedfdataobject解决方案tolerancelength
1条回答
网友
1楼 · 发布于 2024-09-27 23:15:31

我建议在PyPI上使用^{}包,而不是pandas/numpy式的解决方案。在

其思想是将每个长度+/-公差间隔添加到间隔树中,使间隔映射到相关对象。然后,迭代长度并查询间隔树。这将为您提供包含查询长度的公差间隔的所有对象。在

from intervaltree import IntervalTree

t = IntervalTree()
for length, obj in zip(data['Length'], data['Object']):
    t[length-tolerance:length+tolerance] = obj

result = {}
for length in data['Length']:
    objs = [iv.data for iv in t[length]]
    result[length] = objs

result字典如下:

^{pr2}$

它不是完全按照您指定的格式,但它应该足够简单,可以对您需要的格式进行任何更改。在

相关问题 更多 >

    热门问题