カラム条件に基づいてリストを作成するdf
私は"Reading"
は、私がデータフレームを持って
>>df_output
LED CFL Incan Hall Reading Hall_List Reading_List
0 3 2 1 100 150 [0,2,0] [2,0,0]
1 2 3 1 150 100 [0,3,0] [2,0,0]
2 0 1 3 200 150 [0,1,0] [0,0,2]
3 1 2 4 300 250 [0,2,0] [1,0,0]
4 3 3 1 100 100 [0,2,0] [2,0,0]
各値内用lists
を含む2つの以上の列、"Hall"
用と別のものを作成したい
>>df
LED CFL Incan Hall Reading
0 3 2 1 100 150
1 2 3 1 150 100
2 0 1 3 200 150
3 1 2 4 300 250
4 3 3 1 170 100
リストは次のように入力されます。
cfl_rating = 50
led_rating = 100
incan_rating = 25
Hall_List
の場合:
CFL> LED> Incanが優先されます。それらのうちの1つだけが使用されます(CFLまたはLEDまたはIncan)。
まず、CFL != 0
がある場合は、True
と計算され、min(ceil(Hall/CFL_rating),CFL)
と計算されます。 index=0
の場合、これは2と評価されます。したがって、index=2
に対して[0,1,0]があります。
Reading_List
の場合も、LED> Incan> CFLが優先されます。 index=2
のために、我々はLED == 0
を持っているので、我々はmin(ceil(Reading/Incan_rating),Incan)
を計算し、それゆえReading_Listが[0,0,2]
である私の質問は: 「パンダ/ pythonyウェイ」これを行うはありますか?私は現在、各行を繰り返し、if-elif-else条件を使用して値を割り当てています。
私のコードスニペットは、次のようになります。
#Hall_List
for i in range(df.shape[0]):
Hall = []
if (df['CFL'].iloc[i] != 0):
Hall.append(0)
Hall.append(min((math.ceil(df['Hall'].iloc[i]/cfl_rating)),df['CFL'].iloc[i]))
Hall.append(0)
elif (df['LED'].iloc[i] != 0):
Hall.append(min((math.ceil(df['Hall'].iloc[i]/led_rating)),df['LED'].iloc[i]))
Hall.append(0)
Hall.append(0)
else:
Hall.append(0)
Hall.append(0)
Hall.append(min((math.ceil(df['Hall'].iloc[i]/incan_rating)),df['Incan'].iloc[i]))
df['Hall_List'].iloc[i] = Hall
これは本当に遅いですし、間違いなくこれをコーディングする悪い方法のように感じています。