2016-12-20 12 views
1

私は現在、データ科学の目的でパンダを使用しています。これは非常に非独創的なので、他のものから計算したデータフレームにカラムを追加するよりも良い方法があります。優れたファッション。Excelのようなパンダのデータフレーム計算カラムを追加する

例えば、私は質量と期間があるデータフレームを持っており、(M/P)^(1/3)、MとPの列を追加したいと思います適切な単位で変換されます。私はその後も、私が望むように行動し、(ここで、式は非常に非常に簡単だった)読み書きするために、両方の非常に複雑ではありません

day_sec=60.0*60.0*24.0 
Msun=1.989 * 10**30 
clean=reduced.dropna() 
v=pd.DataFrame(clean['orbital_period'].apply(lambda x: x**(1/3.0))/clean['star_mass'].apply(lambda x: x**(1/3.0)), columns=list('v'))*day_sec/(Msun**(1/3.0)) 
clean.append(v) 

を書きます。なにか提案を?

+0

既存の列から新しい列を作成したい場合は、それを行うための最善の方法は、DF 'のようなものである[ 'C '] = df [' a '] + df [' b '] 'である。 –

答えて

5

ここでは適用を一切使用しないでください。新しい列を次のような1つのベクトル化された操作として記述する必要があります。それは次のように減少させることができるようになります

clean['v'] = clean['orbital_period'] ** (1/3.0)/clean['star_mass'] ** (1/3.0) *day_sec/(Msun**(1/3.0)) 

power = 1/3.0 
(clean.orbital_period/(clean.star_mass * Msun)) ** power * day_sec 
+0

または 'pow'と' pow(clean.orbital_period /(clean.star_mass * Msun)、1/3.0)* day_sec'のようなものが動作するはずです。 – lmo

+0

あなたのコードを実行すると、次のように表示されます。/Users/Home/anaconda/lib/python2.7/site-packages/ipykernel/__main__.py:5:SettingWithCopyWarning: 値がコピーに設定しようとしていますDataFrameからスライスします。 .loc [row_indexer、col_indexer] = valueを代わりに使用してみてください – Matt

関連する問題