2017-07-03 9 views
0

の値に基づいてデータフレームの新フィールドを作成し、現在、私は次のデータフレームのテーブルを持っている:Pythonの:効率的に既存のフィールド

enter image description here

これは私が(必要な列が黄色でハイライトを作成する表であります):以下

enter image description here

私はコードで実装するロジックです:

  • テーブル内の既存の列ごとに新しい列を作成し、_Weightを列名に追加します。
  • 列の値がNULLでない場合は、nullでない各行に、特定の数のポイントを割り当てます(この例ではAdvisor_Weight列に50、他の列には100)。

私は手動でnp.whereタイプのステートメントを使用して新しい列を手動で作成する方法を、これを低速/非効率的に行う方法を知っています。

私はこれを行うには効率的なループ方法がありますか?どんな助けでも大歓迎です!

答えて

0

あなたはパンダDATAFRAMEで、このデータを持っている場合、それは本当に簡単です:ここ

は私のサンプルのDFである:

df = pd.DataFrame([[np.NaN, np.NaN, np.NaN],['Significant',np.NaN, np.NaN],[np.NaN, "Yes", np.NaN], ["Significant", np.NaN, "Top Advisor"]], columns=['Advisor', 'Retirement', 'Recognition']) 

enter image description here

columns_50_points = [df.columns[0]] 
columns_100_points = df.columns[1:] 

for col in columns_50_points: 
    df[col+"_Weight"] = ~df[col].isnull() * 50 

for col in columns_100_points: 
    df[col+"_Weight"] = ~df[col].isnull() * 100 

まず、私は非常にどのように価値がある列を指定リストの1つにそれらを割り当てることによって。

〜df [col] .isnull()これは、値がnullでないかどうかをチェックします。そのデータフレームの後

は次のようになります。 enter image description here

ていますが、それは良く見えるように、列の順序を変更することができます。

df.reindex_axis(sorted(df.columns), axis=1) 

enter image description here

私はそれが

EDIT役に立てば幸い:あなたのフィールドはNaNを、ちょうど空の文字列でない場合、あなたはNaNをに置き換えることができます場合は

を。行うにはこれだけにこれを適用します。

df = df.apply(lambda x: x.str.strip(), axis=1).replace("", np.NaN) 

だから、最初の各文字列はトリミングされ、その後、NaNをに置き換えます。そのあとは、空の文字列に戻りたい場合は、あなたのNaNは文字列でもあるかのように簡単に

df.fillna("") 

としてそれだけで文字列のようにメソッドを置き換えるためにこれを追加し、です:置き換える([「」、「ナン」] 、np。NaN)

+0

上記の詳細な説明をありがとうございます。残念ながら、データフレームにコードを適用すると、_Weight列はNaNを認識しません。たとえば、Advisor_Weightフィールドの各行は50になります。私のデータフレームは空白をnan - >と表示して何かに影響を与えますか? – PineNuts0

+0

回答が更新されました。今すぐ使えることを願って –

関連する問題