Pandas:如何为每组值分配一个标签?



假设我有一个这样的df:

Value
0  True 
1  True
2  False
3  False
4  False
5  True
6  True
7  False
8  True
9  True

假设我想为每组True值分配一个标签,这样连续的True值被分配相同的标签,因为它们构成一个集群,而False值总是得到0:

Value  Label
0  True   1
1  True   1
2  False  0
3  False  0
4  False  0
5  True   2
6  True   2
7  False  0
8  True   3
9  True   3

我怎么能在熊猫中这样做呢?

试试这个:

>>> df['Label'] = df[df['Value']].index.to_series().diff().ne(1).cumsum()
>>> df
Value  Label
0   True    1.0
1   True    1.0
2  False    NaN
3  False    NaN
4  False    NaN
5   True    2.0
6   True    2.0
7  False    NaN
8   True    3.0
9   True    3.0
>>> 

这是另一种完全独立于索引的方法:

m = df['Value']
df['Label'] = m.ne(m.shift()).cumsum().where(m)//2+df['Value'].iloc[0]

解释:如果连续的值不同,开始一个新的组,只保留True组,将组号除以2以解释True/False的交替,并根据第一项是False还是True来纠正初始组号。

最新更新