2016-06-20 3 views
1

Ich möchte benachbarte Zeilen in zwei separaten Spalten vergleichen. Ich habe eine dataframe mit zwei Spalten, Letter und Boolean_Value. Ich möchte eine neue Spalte erstellen, New Col, in der der Wert True oder False ist.Verwenden von pd.apply() mit Verschiebung zum Vergleichen benachbarter Zeilen

für den Wert um wahr zu sein:

Die unten nächste Zeile (höheren Index) müssen Sie die gleiche Letter Wert und die die nächste Reihe teilen sich ein Boolean_Value von True haben.

für den Wert falsch sein:

Alle anderen Szenarien

Mein Code, liefert alle falschen Werte:

import pandas as pd 
df = pd.DataFrame(data=[['A', False], 
         ['A', True], 
         ['B', False], 
         ['B', False], 
         ['B', True]] 
        ,columns=['Letter', 'Boolean_Value']) 

def my_test2(row): 
    try: 
     if row['Letter'].shift(1) == row['Letter'] and row['Boolean_Value'].shift(1) == True: 
      return True 
     else: 
      return False 
    except: 
     return False 

df['New Col'] = df.apply(my_test2, axis=1) 

print df 

Ausbeuten:

Letter Boolean_Value New Col 
0  A   False False 
1  A   True False 
2  B   False False 
3  B   False False 
4  B   True False 

gewünschte Ausgabe:

Letter Boolean_Value New Col 
0  A   False True 
1  A   True False 
2  B   False False 
3  B   False True 
4  B   True False 

Antwort

2

Sie könnten:

df['new_col'] = (df.Letter == df.Letter.shift(-1)) & df.Boolean_Value.shift(-1) 

    Letter Boolean_Value new_col 
0  A   False True 
1  A   True False 
2  B   False False 
3  B   False True 
4  B   True False 
1

Versuchen Sie folgendes:

import pandas as pd 
df = pd.DataFrame(data=[['A', False], 
         ['A', True], 
         ['B', False], 
         ['B', False], 
         ['B', True]] 
        ,columns=['Letter', 'Boolean_Value']) 


df['New Col'] = df['Letter'] == df['Letter'].shift(-1) 
df['New Col'] = df['New Col'] != df['Boolean_Value'].shift(1) 

print(df) 
Verwandte Themen