2016-11-01 16 views
1

カスタム関数を適用し、データフレームに既に存在する2つの列に基づいてpopulation2050という派生列を作成します。各行のパンダデータフレームにカスタム関数を適用する方法

import pandas as pd 
import sqlite3 
conn = sqlite3.connect('factbook.db') 
query = "select * from facts where area_land =0;" 
facts = pd.read_sql_query(query,conn) 
print(list(facts.columns.values)) 

def final_pop(initial_pop,growth_rate): 
    final = initial_pop*math.e**(growth_rate*35) 
    return(final) 

facts['pop2050'] = facts['population','population_growth'].apply(final_pop,axis=1) 

上記のコードを実行するとエラーが発生します。 「適用」機能を正しく使用していませんか?

答えて

4

Applyは、軸= 1の行全体に沿ってあなたを渡します。このように調整して、あなたの2列はinitial_popgrowth_rate

def final_pop(row): 
    return row.initial_pop*math.e**(row.growth_rate*35) 
2

と呼ばれていると仮定しますが、ほとんどがあった:ラムダを使用して

facts['pop2050'] = facts.apply(lambda row: final_pop(row['population'],row['population_growth']),axis=1) 

は、あなたではなく、特定のあなたの関数に記載されている(面白い)のパラメータを維持することができますそれらを「行」で束ねる。

0

DataFrame.apply()を使用しなくても同じ結果が得られます。 Pandasシリーズ(またはデータフレーム列)は、NumPy関数の直接引数として使用することも、要素単位で適用される組み込みPython演算子として使用することもできます。

import numpy as np 

facts['pop2050'] = facts['population'] * np.exp(35 * facts['population_growth']) 

これは、列population_growth内の各要素を乗算し、その新しい列(35 * population_growth)にnumpyののEXP()関数を適用し、その後 'で結果を追加します。あなたのケースでは、それは次のように単純です人口'。

+1

詳しい説明を追加してください –

関連する問題