2016-07-07 4 views
2

Ich versuche, einen Wert in einer Pandas-Datenframezeile zu finden und eine neue Spalte zu erstellen, die hervorhebt, ob die nächste Zeile übereinstimmt. So für das folgende Beispiel:Wert in Datenframezeile suchen - neue Spalte erstellen Hervorhebung nächste Zeilenübereinstimmung

rng = pd.DataFrame({'test_1': ['A', 'A','A', 'A', 'B','B', 'A' , 'A', 'A', 'A','A' , 'A', 'A', 'A',]}, index = pd.date_range('4/2/2014', periods=14, freq='BH')) 
reg 

Die Zeilen == B auf 2014.04.02 13.00.00 und 14.00.00 2014.04.02 so gibt es eine Übereinstimmung:

test_1 
2014-04-02 09:00:00 A 
2014-04-02 10:00:00 A 
2014-04-02 11:00:00 A 
2014-04-02 12:00:00 A 
2014-04-02 13:00:00 B 
2014-04-02 14:00:00 B 
2014-04-02 15:00:00 A 
2014-04-02 16:00:00 A 
2014-04-03 09:00:00 A 
2014-04-03 10:00:00 A 
2014-04-03 11:00:00 C 
2014-04-03 12:00:00 A 
2014-04-03 13:00:00 D 
2014-04-03 14:00:00 D 

so die neue Spalte sollte wie folgt lauten:

B_Matches 
    2014-04-02 09:00:00 0 
    2014-04-02 10:00:00 0 
    2014-04-02 11:00:00 0 
    2014-04-02 12:00:00 0 
    2014-04-02 13:00:00 0 
    2014-04-02 14:00:00 1 
    2014-04-02 15:00:00 0 
    2014-04-02 16:00:00 0 
    2014-04-03 09:00:00 0 
    2014-04-03 10:00:00 0 
    2014-04-03 11:00:00 0 
    2014-04-03 12:00:00 0 
    2014-04-03 13:00:00 0 
    2014-04-03 14:00:00 0 

ich werde dann das gleiche für C, D usw. in anderen Spalten tun. Ich versuche im Grunde, Zeiten zu finden, in denen eine bestimmte Bedingung zu sehen ist, und die nächste Periode ist dieselbe und ich werde eine Zählung() in dieser Spalte machen, um zu sehen, wie oft die nächste Periode zusammenpasst. Bitte zeigen Sie auch andere Möglichkeiten, dies zu tun.

Danke für jede Hilfe.

Antwort

2

Sie können eine func definieren, die Ihren Wert annimmt und gibt zurück, ob alle Zeilen Ihre Bedingung erfüllt, ist dies für jeden Wert arbeiten Sie, die boolean Serie passieren wird gegossen dann int so wandelt es True und False-1 und 0 bzw. :

In [220]: 
def func(val): 
    return ((rng['test_1'] == val) & (rng['test_1'].shift() == val)).astype(int) 
​ 
func('B') 

Out[220]: 
2014-04-02 09:00:00 0 
2014-04-02 10:00:00 0 
2014-04-02 11:00:00 0 
2014-04-02 12:00:00 0 
2014-04-02 13:00:00 0 
2014-04-02 14:00:00 1 
2014-04-02 15:00:00 0 
2014-04-02 16:00:00 0 
2014-04-03 09:00:00 0 
2014-04-03 10:00:00 0 
2014-04-03 11:00:00 0 
2014-04-03 12:00:00 0 
2014-04-03 13:00:00 0 
2014-04-03 14:00:00 0 
Freq: BH, Name: test_1, dtype: int32 

In [222]: 
func('A') 

Out[222]: 
2014-04-02 09:00:00 0 
2014-04-02 10:00:00 1 
2014-04-02 11:00:00 1 
2014-04-02 12:00:00 1 
2014-04-02 13:00:00 0 
2014-04-02 14:00:00 0 
2014-04-02 15:00:00 0 
2014-04-02 16:00:00 1 
2014-04-03 09:00:00 1 
2014-04-03 10:00:00 1 
2014-04-03 11:00:00 1 
2014-04-03 12:00:00 1 
2014-04-03 13:00:00 1 
2014-04-03 14:00:00 1 
Freq: BH, Name: test_1, dtype: int32 
+0

Das ist perfekt, danke nochmal EdChum. Ich werde dies über verschiedene df Spalten so leicht modifiziert zu 'def func_match (df_in, val): Rückkehr ((df_in == val) & (df_in.shift() == val)). Astype (int)'. – ade1e

Verwandte Themen