Pandas Dataframe Check if column value is in column list

前端 未结 4 880
旧巷少年郎
旧巷少年郎 2021-01-02 13:40

I have a dataframe df:

data = {\'id\':[12,112],
        \'idlist\':[[1,5,7,12,112],[5,7,12,111,113]]
       }
df=pd.DataFrame.from_dict(data)
         


        
4条回答
  •  感动是毒
    2021-01-02 14:09

    Try simple for loop:

    flaglist = []
    for i in range(len(df)):
        if df.id[i] in df.idlist[i]:
            flaglist.append(1)
        else:
            flaglist.append(0)
    df["flag"] = flaglist 
    

    df:

        id                idlist  flag
    0   12    [1, 5, 7, 12, 112]     1
    1  112  [5, 7, 12, 111, 113]     0
    

    To drop rows:

    flaglist = []
    for i in range(len(df)):
        if df.id[i] not in df.idlist[i]:
            flaglist.append(i)
    df = df.drop(flaglist)
    

    df:

       id              idlist  flag
    0  12  [1, 5, 7, 12, 112]     1
    

    Above can be converted to list comprehension for creating a flag column:

    df["flag"] = [df.id[i] in df.idlist[i]    for i in range(len(df))]
    print(df)
    #     id                idlist   flag
    # 0   12    [1, 5, 7, 12, 112]   True
    # 1  112  [5, 7, 12, 111, 113]  False
    

    or

    df["flag"] = [1 if df.id[i] in df.idlist[i] else 0    for i in range(len(df))]
    print(df)
    #     id                idlist  flag
    # 0   12    [1, 5, 7, 12, 112]     1
    # 1  112  [5, 7, 12, 111, 113]     0
    

    and for selecting out rows:

    flaglist = [i   for i in range(len(df))   if df.id[i] in df.idlist[i]]
    print(df.iloc[flaglist])
    #    id              idlist
    # 0  12  [1, 5, 7, 12, 112]
    

提交回复
热议问题