Pandasで条件に当てはまる列だけ同じ変換をしたい


Pandasで条件に当てはまる列だけ同じ変換を施したく、以下のコードを書いていますが  
can't assign to function callのSyntax Errorが出てしまいます。

[code]

    df.str.contains("x") = df.str.contains("x").apply(lambda x: 1 if x == 1 else 0)
    
[/code]

どう改良すればよろしいでしょうか？  
よろしくお願いいたします。




条件は、「文字列"x"がカラム名に含まれる場合、そのカラムの値がもし1でなければ0を代入する」という内容でしょうか。

[code]

    import pandas as pd
    
    df = pd.DataFrame({
        "colx": [1,2,3],
        "coly": [4,5,6],
        "colz": [7,8,9],
    })
    
    
    # AS-IS:
    # |    |   colx |   coly |   colz |
    # |---:|-------:|-------:|-------:|
    # |  0 |      1 |      4 |      7 |
    # |  1 |      2 |      5 |      8 |
    # |  2 |      3 |      6 |      9 |
    #
    # TO-BE:
    # colx の index1と2の値が0に変わる
    # |    |   colx |   coly |   colz |
    # |---:|-------:|-------:|-------:|
    # |  0 |      1 |      4 |      7 |
    # |  1 |      0 |      5 |      8 |
    # |  2 |      0 |      6 |      9 |
    
    # 1. カラム毎にループ
    for col in df:
    
        # 2. もし文字列"x"がカラム名に含まれる場合
        if "x" in col:
    
            # 3. そのカラムの値が1でなければ0を代入する
            df.loc[:, col] = df.loc[:, col].apply(lambda x: 1 if x == 1 else 0)
    
[/code]

* * *

`str`アクセサは値に対する条件のため、以下のようなときに使います：

[code]

    df = pd.DataFrame({
        "colx": ["one", "two", "three"],
        "coly": ["four", "five", "six"],
        "colz": ["seven", "eight", "nine"],
    })
    
    # AS-IS:
    # |    | colx   | coly   | colz   |
    # |---:|:-------|:-------|:-------|
    # |  0 | one    | four   | seven  |
    # |  1 | two    | five   | eight  |
    # |  2 | three  | six    | nine   |
    #
    # TO-BE:
    # 値に"t"が含まれる場合、その値を"X"にする。
    # |    | colx   | coly   | colz   |
    # |---:|:-------|:-------|:-------|
    # |  0 | one    | four   | seven  |
    # |  1 | X      | five   | X      |
    # |  2 | X      | six    | nine   |
    
    
    for col in df:
        df.loc[df[col].str.contains("t"), col] = "X"
    
[/code]

参考：  
\- <https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.Series.str.contains.html>




条件は、「文字列"x"がカラム名に含まれる場合、そのカラムの値がもし1でなければ0を代入する」という内容でしょうか。

[code]

    import pandas as pd
    
    df = pd.DataFrame({
        "colx": [1,2,3],
        "coly": [4,5,6],
        "colz": [7,8,9],
    })
    
    
    # AS-IS:
    # |    |   colx |   coly |   colz |
    # |---:|-------:|-------:|-------:|
    # |  0 |      1 |      4 |      7 |
    # |  1 |      2 |      5 |      8 |
    # |  2 |      3 |      6 |      9 |
    #
    # TO-BE:
    # colx の index1と2の値が0に変わる
    # |    |   colx |   coly |   colz |
    # |---:|-------:|-------:|-------:|
    # |  0 |      1 |      4 |      7 |
    # |  1 |      0 |      5 |      8 |
    # |  2 |      0 |      6 |      9 |
    
    # 1. カラム毎にループ
    for col in df:
    
        # 2. もし文字列"x"がカラム名に含まれる場合
        if "x" in col:
    
            # 3. そのカラムの値が1でなければ0を代入する
            df.loc[:, col] = df.loc[:, col].apply(lambda x: 1 if x == 1 else 0)
    
[/code]

* * *

`str`アクセサは値に対する条件のため、以下のようなときに使います：

[code]

    df = pd.DataFrame({
        "colx": ["one", "two", "three"],
        "coly": ["four", "five", "six"],
        "colz": ["seven", "eight", "nine"],
    })
    
    # AS-IS:
    # |    | colx   | coly   | colz   |
    # |---:|:-------|:-------|:-------|
    # |  0 | one    | four   | seven  |
    # |  1 | two    | five   | eight  |
    # |  2 | three  | six    | nine   |
    #
    # TO-BE:
    # 値に"t"が含まれる場合、その値を"X"にする。
    # |    | colx   | coly   | colz   |
    # |---:|:-------|:-------|:-------|
    # |  0 | one    | four   | seven  |
    # |  1 | X      | five   | X      |
    # |  2 | X      | six    | nine   |
    
    
    for col in df:
        df.loc[df[col].str.contains("t"), col] = "X"
    
[/code]

参考：  
\- <https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.Series.str.contains.html>

