假设我有一个这样的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来纠正初始组号。