2017-10-14 12 views
0

免責事項:私はまだコースワークの活動を受けていて私のコードは非常に素人です。私のコードが非効率であるか、品質が悪い場合は、私にご負担ください。合理添付

私は最近、Pythonのチュートリアルでパンダの力を習っていると、私のコースワークの一部にこれを適用してきました。私たちはPandasでブール値フィルタリングを使用する方法を学びましたので、さらに進んで、ブール値をデータ(効率)の列に追加しようと決めました。

チューターは私たちができる限りコードを最小限にすることに焦点を当てるべきだと言っています - 私は以下の効率の列に対してそうしようとしました。 ベースライン効率値は0.4805(48.05%)です。値がこれを超える場合は許容されます。これ以下の場合は「失敗」です。私はちょうど1行にこれをさらに効率化することができます方法はあり -

df['Classification'] = (df[['Efficiency_%']].sum(axis=1) > 0.4805) 
df['Classification'] = (df['Classification'] == True).astype(int) 

これは、コードの唯一の2行ですが:

私は以下のコードを使用して、私のデータフレームにこれを追加していますか?

私は現在に読んでいる「ラムダ」関数を使用して検討していました。私が考えることができる他の選択肢があるなら、私は興味があります。私が試してみました

私のアプローチがされている:Forループ

  1. - それは非効率的であることに起因する、これを使用しないように助言しました。
  2. 文は、場合 - それはデータフレームではなく、一連であると私は「1」または「0」DFに[「分類」]列を追加することができないように私はこの仕事を得ることができませんでした。

    if i > 0.4805: 
    df['Classification'].append('0') else: 
    df['Classification'].append('1')if test 
    

ありがとうございます。

答えて

1

これは同じことを行うはずです。それは、行によって、1つの列のデータフレームを合計する必要がありますdf[['Efficiency_%']].sum(axis=1)df['Efficiency_%']と同じであり、そしてそれはブールシリーズ自体と同じ結果が得られてもブールシリーズ==真は必要ありません。

df['Classification'] = (df['Efficiency_%'] > 0.4805).astype(int) 
+0

ありがとうございました!それは私が思ったよりはるかに簡単です。あなたが気にしないなら、あなたは私の質問の「IF」声明の部分を詳しく説明できますか?実際にIFアプローチを使用してデータフレームに値を追加することは可能ですか? – azurekirby

+1

Seriesにスカラー値を追加することはできません。forループアプローチを使用する場合は、リストを作成し、リストに「0」と「1」を追加して、そのリストをデータフレームに列として割り当てます: 'lst = [];のようなものです。 df [ifficiency_% ']のiの場合:i> 0.4805の場合:lst.append(1)else:lst.append(0); df ['Classification'] = lst'。 – Psidom

+1

ありがとうPsidom!私は非常に便利なアプローチであるので、これをノートに書きます。 – azurekirby