2016-03-24 40 views
1

我有一個數據幀df,列[ShowOnAir, AfterPremier, ID, EverOnAir]基於python中的第一個元素的條件

我的條件是

  • 如果是groupby(df.ID) 然後if (df.ShowOnAir ==0 or df.AfterPremier == 0)的第一要素,然後EverOnAir = 0

  • else EverOnAir = 1

我不知道如何比較groupby的第一個元素,帶有orignal da的元素taframe df

真的很感激,如果我能得到它的幫助下,

謝謝

回答

0

您可以通過使用cumsum,那麼你可以做對得到的數據幀的邏輯得到您的組行號:

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

您可以先創建新列EverOnAir填充爲1。通過IDapply自定義函數,然後groupbyfwhere通過iat找到列的第一個元素,並填寫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 
相關問題