89269


以下に示すようなDataFrameとlistがあります。

DataFrameのうち、listに含まれる要素と一致する行に対してビットを振りたいです。  
例えば以下のようにするとビットを振ることができますが、for文を使うのでは処理が遅すぎます。  
同様の処理をより高速に実装するにはどうすればよいでしょうか。

**試したコード:**

[code]

    for i, j in lst:
        df.loc[(df["target"] == i) & (df["sepal_length"] == j), "bit"] = 1
    
[/code]

**対象のDataFrameとlist**

[code]

    df = pd.DataFrame(
        {
            "target": [
                "setosa",
                "setosa",
                "setosa",
                "versicolor",
                "versicolor",
                "versicolor",
                "virginica",
                "virginica",
                "virginica",
            ],
            "sepal_length": [5.4, 5.3, 5.2, 5.3, 5.4, 5.5, 5.1, 5.6, 5.3],
            "sepal_width": [3.1, 3.4, 3.6, 3.1, 3.3, 3.8, 3.3, 3.4, 3.0],
        }
    )
    lst = [
        ["setosa", 5.4],
        ["versicolor", 5.5],
        ["versicolor", 5.1],
        ["virginica", 5.1],
        ["virginica", 5.3],
        ["virginica", 5.2],
    ]
    
[/code]


CC BY-SA 4.0
2022-06-07T03:59:27.430
89267
2022-06-07T07:19:14.137
2022-06-07T07:19:14.137
3060
question
python pandas
Pandas の DataFrame にビットを振りたい

[code]

    df['bit'] = df[['target', 'sepal_length']].apply(list, axis=1).isin(lst).astype(int)
    print(df)
    
    #
           target  sepal_length  sepal_width  bit
    0      setosa           5.4          3.1    1
    1      setosa           5.3          3.4    0
    2      setosa           5.2          3.6    0
    3  versicolor           5.3          3.1    0
    4  versicolor           5.4          3.3    0
    5  versicolor           5.5          3.8    1
    6   virginica           5.1          3.3    1
    7   virginica           5.6          3.4    0
    8   virginica           5.3          3.0    1
    
[/code]


CC BY-SA 4.0
2022-06-07T05:02:11.317
89269
2022-06-07T05:02:11.317
47127
89267
answer