2016-03-24 14 views
1

Ich habe einen Datenrahmen df mit Spalten [ShowOnAir, AfterPremier, ID, EverOnAir].Bedingung basierend auf dem ersten Element einer Gruppe in Python

Meine Bedingung ist, dass

  • wenn es sich um das erste Element des groupby(df.ID) dann if (df.ShowOnAir ==0 or df.AfterPremier == 0), dann EverOnAir = 0

  • else EverOnAir = 1

Ich bin nicht sicher, wie das vergleichen erstes Element der groupby, mit Elementen des orignal da Taframe df.

würde wirklich schätzen, wenn ich Hilfe in sich bekommen konnte,

Danke

Antwort

0

Sie können eine Zeilennummer für Ihre Gruppen erhalten, indem cumsum verwenden, dann können Sie Ihre Logik auf dem resultierenden Datenrahmen zu tun:

df = pd.DataFrame([[1],[1],[2],[2],[2]]) 
df['n']=1 
df.groupby(0).cumsum() 

    n 
0 1 
1 2 
2 1 
3 2 
4 3 
0

Sie können zunächst neue Spalte erstellen EverOnAir1 gefüllt. Dann groupby von ID und apply benutzerdefinierte Funktion f, where finden erste Element der Spalten von iat und füllen 0:

print df 
    ShowOnAir AfterPremier ID 
0   0    0 a 
1   0    1 a 
2   1    1 a 
3   1    1 b 
4   1    0 b 
5   0    0 b 
6   0    1 c 
7   1    0 c 
8   0    0 c 

def f(x): 
    #print x 
    x['EverOnAir'].iat[0] = np.where((x['ShowOnAir'].iat[0] == 0) | 
            (x['AfterPremier'].iat[0] == 0), 0, 1) 
    return x 

df['EverOnAir'] = 1 
print df.groupby('ID').apply(f) 
    ShowOnAir AfterPremier ID EverOnAir 
0   0    0 a   0 
1   0    1 a   1 
2   1    1 a   1 
3   1    1 b   1 
4   1    0 b   1 
5   0    0 b   1 
6   0    1 c   0 
7   1    0 c   1 
8   0    0 c   1 
Verwandte Themen