我可以根据另一列中值的变化来创建新列吗?

ver*_*era 3 python uniqueidentifier pandas

我们说我有这个 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
Run Code Online (Sandbox Code Playgroud)

列中的值['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
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*der 5

您可以使用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
Run Code Online (Sandbox Code Playgroud)

作为旁注,这是一种流行的分组模式.例如,要获取B每个此类组的平均值:

df.groupby((df.A != df.A.shift()).cumsum()).B.mean()
Run Code Online (Sandbox Code Playgroud)