【问题标题】:Compare value to previous value after group by function按功能分组后将值与前一个值进行比较
【发布时间】:2018-11-15 16:53:52
【问题描述】:

我将我的数据分组如下: df1 = df.groupby(['Store', 'Region', 'Item'])

STORE  REGION  
Store1 West  Item price result
               1  1.00     0
               2  2.00     0
               3  2.00     0
                  2.50     1
               4  1.00     0
                  1.00     0
                   .50     1
                  1.00     1

基本上我想用 1 和 0 表示价格是否发生变化,如果没有价格变化。如果每件商品只有一个价格,那么我希望在这些情况下也返回 0。

我已经用下面的代码试过了,但是失败了:

data_cleaned.groupby(['STORE', 'REGION', 'Item'])['price'].apply(lambda x: 1 if x == x.change.shift(1) else 0})

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    您可以将groupbydiff 一起使用。这是一个演示:

    df = pd.DataFrame({'Item': [1, 2, 3, 3, 4, 4, 4, 4],
                       'price': [1, 2, 2, 2.5, 1, 1, 0.5, 1]})
    
    df = df.set_index('Item')
    
    df['change'] = df.groupby(level=0)['price'].diff().abs().gt(0).astype(int)
    
    print(df)
    
          price  change
    Item               
    1       1.0       0
    2       2.0       0
    3       2.0       0
    3       2.5       1
    4       1.0       0
    4       1.0       0
    4       0.5       1
    4       1.0       1
    

    【讨论】:

    • 我分组的列呢?即商店和地区
    • @Hana,相应地修改您的代码。我提供了一个完整的例子。 level 参数接受一个序列:level : int, level name, or sequence of such, default None
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 2015-09-19
    • 1970-01-01
    • 2022-08-23
    相关资源
    最近更新 更多