如何在最小值和最大值之间对pandas数据帧进行分类/标记

时间:2016-10-20 09:57:48

标签: python pandas dataframe label subset

我想要一个功能,例如{1}},在给定pandas DataFrame get_cluster(df, numspan)和整数df作为输入的情况下,返回标签(数字)的DataFrame numspan,表示根据此计算的子集中的成员资格到DataFrame的max和min之间的差值除以numspan。

换句话说:

  1. 取df,例如df_cluster(未必订购,可能是实数)
  2. 获取最高1, 2, 3, 4, 5和分钟5
  3. 计算差异1,表示主要设置宽度
  4. 将差值除以numspan,例如5 - 1 = 4获取子集单位宽度2
  5. 然后对于DataFrame的每个项目检查它属于哪个子集(规则是 L1&lt; = x&lt; L2 其中 L1 L2 < / em>是子集的下限和上限)
  6. 返回表示相关子集的数字,因此最终的df_cluster为2(规则中包含与最大上限对应的最后一个标签)
  7. 我的代码(另一个例子,见下图):

    1, 1, 2, 2, 2

    图片中:

    Picture of the example

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

    吉尔伯托

    更新

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

    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
    

1 个答案:

答案 0 :(得分:1)

This is called pd.cut where a bins= argument will allow you to set the number you numspan in the question.

It returns bin ranges by default. labels=False is a parameter you can use to get a bin number instead.