0

機械学習用の pandas df に機能を追加できるようにする Python 関数を作成しようとしています。Python 関数で文字列を使用する方法を誤解していると思います。

この関数は df の行を調べ、何ヶ月先の行識別子 (下の行数) が同じ識別子を持つかどうかを確認します。そうであれば、将来の行の「開始」機能の値を新しい機能列に追加し、それ以外の場合は最初の行の「終了」を追加します。カスタマイズされたシフト機能です。

この機能を追加したら、適切な列ラベルを使用して df に新しい機能として 1 または 0 の列をさらに追加したいと思います。これは、「feat_so_many_months_in_future_is_higher_or_lower」のようなラベルが付けられます。

問題は、しきい値部分の周りで 2 番目のバイナリにさえ到達できないことです。最初の新機能を適切な名前で追加する際に問題が発生しています。

def binary_up_down(name_of_new_feature, months_in_future, percent_threshold):
    name_of_new_feature = [] 
    for i in range(0, df.shape[0], 1): 
        try:
            if df['identifier'][i]==df['identifier'][i + months_in_future]:
                name_of_new_feature.append(df['start'][i + months_in_future])
            else:
                name_of_new_feature.append(df['end'][i])
        except KeyError:
                name_of_new_feature.append(df['end'][i])

    df[str(name_of_new_feature)]=name_of_new_feature

    ### Add test to check if shifted value is above or below threshold and name new feature  
        appropriately ###

    return df

私の考えは、次のように関数を呼び出すことです:

binary_up_down('feat_value_in_1m', 1, 5)
#Then
binary_up_down('feat_value_in_3m', 3, 5) # and on an on...

コードを実行すると、この行が問題のようです:

df[str(name_of_new_feature)] = name_of_new_feature

...すべての新しい機能列の値を列名として追加するためです!

どんなポインタでも大歓迎です!

4

1 に答える 1