【问题标题】:Can I create a new column based on when the value changes in another column?我可以根据另一列中的值何时更改来创建新列吗?
【发布时间】:2016-12-30 23:05:22
【问题描述】:

假设我有这个df

print(df)
              DATE_TIME  A  B
0   10/08/2016 12:04:56  1  5
1   10/08/2016 12:04:58  1  6
2   10/08/2016 12:04:59  2  3
3   10/08/2016 12:05:00  2  2
4   10/08/2016 12:05:01  3  4
5   10/08/2016 12:05:02  3  6
6   10/08/2016 12:05:03  1  3
7   10/08/2016 12:05:04  1  2
8   10/08/2016 12:05:05  2  4
9   10/08/2016 12:05:06  2  6
10  10/08/2016 12:05:07  3  4
11  10/08/2016 12:05:08  3  2

['A'] 列中的值会随着时间的推移而重复,但我需要一个列,每次更改时它们都有一个新的 ID,这样我就会有类似下面的 df

print(df)
               DATE_TIME  A  B  C
 0   10/08/2016 12:04:56  1  5  1
 1   10/08/2016 12:04:58  1  6  1
 2   10/08/2016 12:04:59  2  3  2
 3   10/08/2016 12:05:00  2  2  2
 4   10/08/2016 12:05:01  3  4  3
 5   10/08/2016 12:05:02  3  6  3
 6   10/08/2016 12:05:03  1  3  4
 7   10/08/2016 12:05:04  1  2  4
 8   10/08/2016 12:05:05  2  4  5
 9   10/08/2016 12:05:06  2  6  5
 10  10/08/2016 12:05:07  3  4  6
 11  10/08/2016 12:05:08  3  2  6

有没有办法用 python 做到这一点?我对此仍然很陌生,并希望在熊猫中找到可以帮助我的东西,但我还没有找到任何东西。在我的原始数据框中,['A'] 列中的值大约每十分钟更改一次,而不是像我的示例中那样每两行更改一次。有谁知道我该如何完成这项任务?谢谢

【问题讨论】:

    标签: python pandas uniqueidentifier


    【解决方案1】:

    您可以使用 shift-cumsum 模式。

    df['C'] = (df.A != df.A.shift()).cumsum()
    
    >>> df
                  DATE_TIME  A  B  C
    0  10/08/2016  12:04:56  1  5  1
    1  10/08/2016  12:04:58  1  6  1
    2  10/08/2016  12:04:59  2  3  2
    3  10/08/2016  12:05:00  2  2  2
    4  10/08/2016  12:05:01  3  4  3
    5  10/08/2016  12:05:02  3  6  3
    6  10/08/2016  12:05:03  1  3  4
    7  10/08/2016  12:05:04  1  2  4
    8  10/08/2016  12:05:05  2  4  5
    9  10/08/2016  12:05:06  2  6  5
    10 10/08/2016  12:05:07  3  4  6
    11 10/08/2016  12:05:08  3  2  6
    

    附带说明,这是一种流行的分组模式。例如,要获取每个此类组的平均 B 值:

    df.groupby((df.A != df.A.shift()).cumsum()).B.mean()
    

    【讨论】:

    • 这就是我要尝试“手工”做的事情。很好的累积求和函数。
    猜你喜欢
    • 2021-12-02
    • 2020-04-16
    • 2022-08-12
    • 2021-03-30
    • 2018-03-14
    • 1970-01-01
    • 2020-10-18
    • 2022-08-10
    • 2021-09-05
    相关资源
    最近更新 更多