44268


私は現在関数で複数の変数を宣言しようとしています.  
その際に変数名を関数実装時に決め打ちで宣言することは後のことを考えると非常に良くないと思い工夫をしようと試みています.  
そこで、関数の引数を宣言する変数名を含ませることで解決できると考えました.しかし引数を変数内に用いる方法がわかりません.  
どうかお力添えをお願いしたく思います.

やりたいことの例:

[code]

    def new_variable(string_A, string_B):
        string_A + '_' + string_B = None    #問題となっているところ
    
[/code]

といったようにA＿Bのような変数を宣言したいと考えています.

調べましたところexacなどでは関数内でのみ有効なため呼び出した側には返せないようですが、関数内でPandasのDataFrameなどに追加してDataFrameを返すつもりですのでその辺りは問題ないと思われます.

・追記  
動的に変数を作りたい理由としてはPandasのDataFrame中のX列の値に'hoge'が含まれているならばX_hoge列を生成し含まれていた行を1としたためです.  
実際のコードで示させていただきますと

[code]

    def new_columns(df, col, searchVal): #df=DataFrame,col=列名,searchVal=含まれているか調べたい文字列
        count = 0
        df.assign(col_searchVal : np.nan)    #今回問題となっている箇所
        df[col_searchVal] = np.nan           #もう一つの案
        for val in df[col]:
            if searchVal in val:         #調べたい文字列が含まれていたならば
                df[col_searchVal][count] = 1
            count =+ 1
        df.drop(col, axis=1)
        return df
    
[/code]


CC BY-SA 4.0
2018-05-25T14:57:55.927
44266
2018-05-25T16:55:36.000
2018-05-25T16:00:54.880
28490
28490
question
python python3 pandas
Pythonにおける変数宣言時に異なる変数を用いる方法


今回の用途のために変数を動的に作る必要はありません。

たとえば [`df.apply()`](https://pandas.pydata.org/pandas-
docs/stable/generated/pandas.DataFrame.apply.html) 関数を使って以下のように書けます。

[code]

    def new_columns(df, col, searchVal):
        name = str(col) + '_' + str(searchVal)
        df[name] = df.apply(lambda row: 1.0 if row[col] == searchVal else np.nan, axis=1)
    
[/code]

`axis=1` があるため、それぞれの row について apply されていることに注意してください。

以下、動作例です。

[code]

    >>> # サンプルの Dataframe です
    ... df = pd.DataFrame({'a': [3, 1, 4, 1, 5],
    ...                    'b': ['x', 'y', 'x', 'x', 'y']})
    >>> new_columns(df, 'a', 1)
    >>> df
       a  b  a_1
    0  3  x  NaN
    1  1  y  1.0
    2  4  x  NaN
    3  1  x  1.0
    4  5  y  NaN
    >>> new_columns(df, 'b', 'y')
    >>> df
       a  b  a_1  b_y
    0  3  x  NaN  NaN
    1  1  y  1.0  1.0
    2  4  x  NaN  NaN
    3  1  x  1.0  NaN
    4  5  y  NaN  1.0
    >>> 
    
[/code]

こちらの Q&A も参考になります: ["pandas create new column based on values from other
columns"](https://stackoverflow.com/q/26886653/5989200) \-- Stack Overflow

## 別の方法

もとの column が無くなってもよいのであれば、`searchVal` と等しいかどうかで二値化したあとに column
の名前を変える方法もあります。用途によっては名前の付け替えは不要かもしれません。

[code]

    def new_columns(df, col, searchVal):
        df[col] = (df[col] == searchVal).astype(int)
        newname = str(col) + '_' + str(searchVal)
        return df.rename(index=str, columns={col: newname})
    
[/code]


CC BY-SA 4.0
2018-05-25T16:26:16.983
44268
2018-05-25T16:55:36.000
2018-05-25T16:55:36.000
19110
19110
44266
answer