【问题标题】:Repeat the value in column B until there is a change in column A重复 B 列中的值,直到 A 列发生变化
【发布时间】:2017-04-20 17:44:47
【问题描述】:

我需要在 B 列中重复该值,直到 A 列发生变化。

这是输入

    Column A  Column B
     18         1
     18         0
     18         0
     18         0
     24         2
     24         0
     18         3
     18         0
     18         0
     18         0

预期输出

   Column A  Column B
    18         1
    18         1
    18         1
    18         1
    24         2
    24         2
    18         3
    18         3
    18         3
    18         3

【问题讨论】:

    标签: python python-2.7 pandas group-by cumsum


    【解决方案1】:

    您可以使用transform by first 如果需要通过Series 重复每个组的第一个值,这是由移位列cumsum 创建的Col A

    print (df['Col A'].ne(df['Col A'].shift()).cumsum())
    0    1
    1    1
    2    1
    3    1
    4    2
    5    2
    6    3
    7    3
    8    3
    9    3
    Name: Col A, dtype: int32
    
    df['Col B'] = df.groupby(df['Col A'].ne(df['Col A'].shift()).cumsum())['Col B']
                    .transform('first')
    print (df)
       Col A  Col B
    0     18      1
    1     18      1
    2     18      1
    3     18      1
    4     24      2
    5     24      2
    6     18      3
    7     18      3
    8     18      3
    9     18      3
    

    【讨论】:

    • 嗨,你能解释一下“第一”是如何工作的吗?因为上面的代码在 Ipython Notebook 和 Azure Ml 中不起作用
    • 错误:文件“.\Script Bundle\co.py”,第 141 行,在 pipeline_1 df['Last_Act_User'] = df.groupby(df['thermostat'].ne(df[' thermostat'].shift()).cumsum())['Last_Act_User'].transform('first') 文件“C:\pyhome\lib\site-packages\pandas\core\groupby.py”,第 2210 行,在变换 res = wrapper(group) 文件“C:\pyhome\lib\site-packages\pandas\core\groupby.py”中,第 2203 行,在 中 wrapper = lambda x: getattr(x, func)(* args, **kwargs) TypeError: first() 正好需要 2 个参数(给定 1 个)
    • 是的,我看到了你的问题,但在 Azure 中我从不工作 :(
    • 它也不适用于 Jupyter Notebook。我猜,它与版本有关。
    • 可以升级吗?最后一个版本是0.19.2
    【解决方案2】:
    A =[18,18,18,18,24,24,18,18,18,18]
    def func(A):
        B = []
        b = 1
        for i in range(len(A)):
            if i == 0:
                B.append(b)
                continue
            if A[i] != A[i-1]:
                b += 1
                B.append(b)          
            else:
                B.append(b)
        return B
    

    出来:

    [1, 1, 1, 1, 2, 2, 3, 3, 3, 3]
    

    【讨论】:

      猜你喜欢
      • 2021-11-17
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 2020-04-14
      相关资源
      最近更新 更多