如何使用熊猫按小于 4 的差值对项目进行分组

圭多

我想知道如何创建按其差异 <=4 分组的项目类,因此 1,2,3,4,5 将被分组为 1, 9-13 到 9 ... 然后选择最小/最大值属性 y,以一种高效/简单的方式:

items= [('x', [ 1,2,3,3,3,5,9,10,11,13]), ('y', [1,1,1,1,1,4,4,1,1,1])]

In[3]: pd.DataFrame.from_items(items) Out[3]: x y 0 1 1 1 2 1 2 3 1 3 3 1 4 3 1 5 5 4 6 9 5 7 10 1 8 11 1 9 13 1

所以我期望的结果是:

xclass ymax ymin 1 4 1 9 5 1 我在没有大熊猫的情况下进行了迭代,但我想用大熊猫测试性能。

大卫戴尔

此类操作通常分两步完成:

  1. 创建一个键来分组。
  2. 使用 groupby 计算汇总统计信息。

我假设您已将数据框df定义为

df = pd.DataFrame.from_items([('x', [ 1,2,3,3,3,5,9,10,11,13]), 
    ('y', [1,1,1,1,1,4,4,1,1,1])])

在您的问题中,第一步没有很好地定义。如果数据密集,如何在组之间绘制边界?例如,如果您有 ,您想对组做df['x'] = [ 1,2,3,3,5,7,9,10,11,13]什么?

最简单的想法是四舍五入x到您想要的精度。这确保组中任何整数之间的距离不超过 4。 但是组将被放置而没有间隙:1-5 到 5、6-10 到 10、11-15 到 15 等。

def custom_round(x, precision, offset):
    return ((x-offset) // precision) * precision + offset
df['xclass'] = custom_round(df['x'], 5, 1)

另一个想法是拥有足够密集的组:如果两个组之间最小距离小于阈值,则可以合并两个组这种算法可以产生由大于阈值的间隙划分的大组。它可以用 DBSCAN 聚类算法来实现。要拥有您想要的组,您可以将阈值距离设置为 3(因为 5 和 9 之间的距离已经是 4):

from sklearn.cluster import DBSCAN
def cluster(x, threshold):
    labels = DBSCAN(eps=3, min_samples=1).fit(np.array(x)[:, np.newaxis]).labels_ 
    return x.groupby(labels).transform(min)
df['xclass'] = cluster(df['x'], 3)

第二步很简单:拥有df包含列xclass和的数据框y,调用:

df.groupby('xclass')['y'].aggregate([min, max]).reset_index()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 Swift 4 中按属性对项目进行分组

如何按内部列表对项目进行分组

如何使用LINQ按值范围对项目进行分组

如何使用熊猫按两列分组?

按 2 列对项目进行分组

Django:按外键对项目进行分组

熊猫应用多个大于和小于按特定列对行进行分组

按数据框进行分组,其值仅小于第二秒-熊猫

如何按类别对项目进行分组和计数?

如何按日期对数组中的项目进行分组?

如何生成颜色以按颜色对项目进行分组?

如何对数组中的项目进行分组?

使用LINQ在项目列表中进行分组

Python对项目进行分组并使用步骤循环

ORACLE SQL:按过去 4 周对数据进行分组

如何使用熊猫按大小和按月对许多文件进行分组?

如何使用熊猫数据帧在直方图中按标签对列进行分组?

熊猫如何使用groupby按标签中的日期对列进行分组?

如何使用Java流按会计年度对项目进行分组

如何使用reduce按属性对数组中的项目进行分组并返回新对象数组

如何按4个时间段和关键点对数据框进行分组

如何按日期与熊猫分组?

如何按列值对熊猫数据框的行进行分组?

如何按定义的时间间隔对熊猫数据帧进行分组?

如何使用SubFlows对已排序流的项目进行分组?

如何使用 Linq 同时对项目列表进行分组和求和?

如何使用php在多维数组中按键对项目进行分组

使用熊猫按日对数据框进行分组

如何在TinyMce 4中对图标进行分组