【问题标题】:How to classify/label pandas dataframe between minimum and maximum如何在最小值和最大值之间分类/标记熊猫数据框
【发布时间】:2016-10-20 09:57:47
【问题描述】:

我想要一个函数,例如get_cluster(df, numspan),给定一个 pandas DataFrame df 和一个整数 numspan 作为输入,返回一个标签(数字)的 DataFrame df_cluster,表示根据 max 和 min 之间的差异计算的子集中的成员资格DataFrame 除以 numspan。

换句话说:

  1. 取df,例如1, 2, 3, 4, 5(不一定是有序的,可能是实数)
  2. 获取最大5 和最小1
  3. 计算差值5 - 1 = 4,表示主集宽度
  4. 将差值除以 numspan,例如2 获取子集单元宽度 2
  5. 然后为 DataFrame 的每个项目检查它属于哪个子集(规则是 L1 其中 L1L2 是子集的下限和上限)
  6. 返回一个代表相关子集的数字,因此最终的df_cluster为1, 1, 2, 2, 2(规则包含与最大上限对应的最后一个标签)

我的代码(还有一个例子,见下图):

import pandas as pd
df = pd.DataFrame({'A':pd.Series([4, 8, 2, 3])})

def get_cluster(df, numspan):
     min = df.min() # e.g. 2
     max = df.max() # e.g. 8
     span = max - min # e.g. 6
     subset_unit = span/numspan # e.g. 6/3 = 2 -> every subset is 2 width

     # code I need...

     return df_cluster

df['Cluster'] = get_cluster(df, 3)
df
   A  Cluster
0  4        2
1  8        3 <= included by rule
2  2        1
3  3        1

图片中:

非常感谢您的帮助和时间,

吉尔伯托

更新

感谢@Boud,快速而优雅的解决方案是:

numbins = 3
labelnames = list(range(1, numbins +1))
df['Cluster'] = pd.cut(df['A'], bins = numbins, labels = labelnames, right=False, include_lowest=True)

【问题讨论】:

    标签: python pandas dataframe label subset


    【解决方案1】:

    这称为pd.cut,其中bins= 参数将允许您在问题中设置numspan 的数字。

    默认返回 bin 范围。 labels=False 是一个可用于获取 bin 编号的参数。

    【讨论】:

    • 非常感谢@Boud。我不得不玩参数,但最终我明白了。解决方案是:df['Cluster'] = pd.cut(df['A'], bins = 3, labels=[1,2,3], right=False, include_lowest=True)。现在我必须处理标签。
    猜你喜欢
    • 2017-07-25
    • 1970-01-01
    • 2017-03-04
    • 2020-04-28
    • 2021-02-08
    • 2022-12-15
    • 2018-05-11
    • 2021-06-05
    • 1970-01-01
    相关资源
    最近更新 更多