2016-10-22 45 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