2016-03-24 18 views
1

[ShowOnAir, AfterPremier, ID, EverOnAir]のデータフレームdfがあります。Pythonのグループの最初の要素に基づく条件

私の条件は、それがその後、groupby(df.ID) if (df.ShowOnAir ==0 or df.AfterPremier == 0)の最初の要素は、私がどのように比較するかわからない、その後、EverOnAir = 0

  • else EverOnAir = 1

    • であればということですgroupbyの最初の要素、orignal daの要素タフラメdf。私はそれで助けを得ることができれば

      あなたは、あなたがたデータフレームの上にあなたのロジックを行うことができ、cumsumを使用して、グループの行番号を取得することができますあなたの

    答えて

    0

    ありがとう、本当に感謝:

    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を入力することができます。その後groupbyIDapplyカスタム関数によってfwhereiatことで、列の最初の要素を検索し、埋める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 
    
    関連する問題