TLDR:列またはその値を明示的に指定せずに、パンダデータフレーム内の複数の列のすべてのオプションを反復する方法は?
長いバージョン:私はこのような pandas データフレームを持っていますが、ここにリストされているよりも多くの機能または薬物投与量の組み合わせしかありません。3 種類の機能だけでなく、70 のようなものを使用することもできます...:
> dosage_df
First Score Last Score A_dose B_dose C_dose
22 28 1 40 130
55 11 2 40 130
15 72 3 40 130
42 67 1 90 130
90 74 2 90 130
87 89 3 90 130
14 43 1 40 700
12 61 2 40 700
41 5 3 40 700
データ フレームに加えて、各機能に関連する範囲を含む Python 辞書もあります。キーは機能名であり、取り得るさまざまな値がキーです。
> dict_of_dose_ranges = {'A_dose': [1, 2, 3], 'B_dose': [40, 90], 'C_dose': [130,700]}
私の目的のために、特定の組み合わせ (A_dose = 1、B_dose = 90、および C_dose = 700 など) を生成する必要があり、これらの設定に基づいて、データフレームから関連するスライスを取り出し、その小さなサブセットから関連する計算を行います。結果をどこかに保存します。
すべての機能のすべての可能な組み合わせに対してこれを行う必要があります (ここにある 3 つよりもはるかに多く、将来的には可変になります)。
この場合、これを SkLearn のパラメーター グリッドに簡単にポップして、オプションを生成できます。
> from sklearn.grid_search import ParameterGrid
> all_options = list(ParameterGrid(dict_of_dose_ranges))
> all_options
そして得る:
[{'A_dose': 1, 'B_dose': 40, 'C_dose': 130},
{'A_dose': 1, 'B_dose': 40, 'C_dose': 700},
{'A_dose': 1, 'B_dose': 90, 'C_dose': 130},
{'A_dose': 1, 'B_dose': 90, 'C_dose': 700},
{'A_dose': 2, 'B_dose': 40, 'C_dose': 130},
{'A_dose': 2, 'B_dose': 40, 'C_dose': 700},
{'A_dose': 2, 'B_dose': 90, 'C_dose': 130},
{'A_dose': 2, 'B_dose': 90, 'C_dose': 700},
{'A_dose': 3, 'B_dose': 40, 'C_dose': 130},
{'A_dose': 3, 'B_dose': 40, 'C_dose': 700},
{'A_dose': 3, 'B_dose': 90, 'C_dose': 130},
{'A_dose': 3, 'B_dose': 90, 'C_dose': 700}]
これは私が問題に遭遇する場所です:
問題 #1)を繰り返し処理できるall_options
ようになりましたが、各辞書オプションから SELECT を実行する方法がわかりませんdosage_df
(つまり、{'A_dose': 1, 'B_dose': 40, 'C_dose': 130} ) 明示的に実行せずに。
以前は、次のようなことができました。
dosage_df[(dosage_df.A_dose == 1) & (dosage_df.B_dose == 40) & (dosage_df.C_dose == 130)]
First Score Last Score A_dose B_dose C_dose
0 22 28 140 130
しかし、動的にスライスするために括弧内に何を入れればよいかわかりません...
dosage_df[?????]
問題 #2)実際に機能の完全な辞書にそれぞれの範囲を入力すると、オプションが多すぎると見なされるため、エラーが発生します...
from sklearn.grid_search import ParameterGrid
all_options = list(ParameterGrid(dictionary_of_features_and_ranges))
all_options
---------------------------------------------------------------------------
OverflowError Traceback (most recent call last)
<ipython-input-138-7b73d5e248f5> in <module>()
1 from sklearn.grid_search import ParameterGrid
----> 2 all_options = list(ParameterGrid(dictionary_of_features_and_ranges))
3 all_options
OverflowError: long int too large to convert to int
二重whileループ、ツリー/再帰法 from here、別の再帰法 from hereを使用するなど、いくつかの代替アプローチを試しましたが、うまくいきませんでした....どんな助けも大歓迎です。