2016-10-22 97 views
1

给定一个熊猫数据帧像熊猫:如何在连续行之后屏蔽第一行?

ID  VALUE 
1  false 
2  true 
3  false 
4  false 
5  false 
6  true 
7  true 
8  true 
9  false 

结果应以下一组真值

ID  RESULT 
1  false 
2  false 
3  true 
4  false 
5  false 
6  false 
7  false 
8  false 
9  true 

如何大熊猫做到这一点的是下一行是真的吗?

+1

你能解释一下预期结果吗? – Grainier

回答

0
import pandas as pd 

values = ['false','true','false','false','false','true','true','true','false'] 
df = pd.DataFrame(values,columns=['values']) 

print "Before changes: " 
print df 

to_become_false = df[df['values'] == 'true'].index.tolist() 
to_become_true = [idx+1 for idx in to_become_false if not(idx+1 in to_become_false)] 
df['values'][to_become_false] = 'false' 
df['values'][to_become_true] = 'true' 

print "\n\nAfter changes: " 
print df 

结果:

Before changes: 
    values 
0 false 
1 true 
2 false 
3 false 
4 false 
5 true 
6 true 
7 true 
8 false 


After changes: 
    values 
0 false 
1 false 
2 true 
3 false 
4 false 
5 false 
6 false 
7 false 
8 true 
2

您可以检查VALUE列的diff()结果等于-1:

df.VALUE.astype(int).diff() == -1 

#0 False 
#1 False 
#2  True 
#3 False 
#4 False 
#5 False 
#6 False 
#7 False 
#8  True 
#Name: VALUE, dtype: bool 
1

您可以针对偏移版本进行比较的值找到新的虚假之后:

>>> df['VALUE'] = df['VALUE'].astype('bool') 
>>> (~df['VALUE'] & df['VALUE'].shift()) 

0 False 
1 False 
2  True 
3 False 
4 False 
5 False 
6 False 
7 False 
8  True 
Name: VALUE, dtype: bool