【问题标题】:Pandas group by window range (Follow up question with category)Pandas 按窗口范围分组(按类别跟进问题)
【发布时间】:2021-10-02 08:51:09
【问题描述】:

Follow up question:

我有以下数据表: 我想提取特定窗口和类别中的组,例如 windows_size= 1000000

value          category    
65951649.0     A         
59397882.0     A       
7633231.0      A        
7638485.0      A       
65951649.0     B         
59397882.0     B       
7633231.0      B        
7638485.0      B   

Output:
value          category    group
65951649.0     A        1  
59397882.0     A        2
7633231.0      A        3 
7638485.0      A        3
65951649.0     B        1  
59397882.0     B        2
7633231.0      B        3 
7638485.0      B        3

是否可以在数据框中执行此操作,或者我必须在单独的数据框中为每个类别执行此操作?

【问题讨论】:

    标签: python pandas group-by


    【解决方案1】:

    使用自定义 lambda 函数:

    window_size = 1000000
    f = lambda x: x.diff().abs().gt(window_size).cumsum()
    df["group"] = df.groupby('category')["value"].apply(f)+1
    print (df)
            value category  group
    0  65951649.0        A      1
    1  59397882.0        A      2
    2   7633231.0        A      3
    3   7638485.0        A      3
    4  65951649.0        B      1
    5  59397882.0        B      2
    6   7633231.0        B      3
    7   7638485.0        B      3
    

    或者加倍groupby,因为需要每组的差值和累计总和:

    df["group"] = (df.groupby('category')["value"].diff().abs().gt(window_size)
                     .groupby(df['category']).cumsum()+1)
    

    【讨论】:

    • 我对这个特定文件有疑问,但我不知道是什么原因。如果我单独尝试该类别,它会起作用,但如果它们在一个数据集中则不会。 rentry.co/msdfa
    • @honeymoon 尝试将df.groupby('category') 更改为df.groupby('category', sort=False)
    • 谢谢,我发现问题是类别 7 中的一个值重复。
    猜你喜欢
    • 2021-10-02
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    相关资源
    最近更新 更多