2017-01-28 19 views
1

問題単純なdataframe(ダウンロード可能なcsv)でgroupbyを試行し、次に列の合計値(サイズ、合計、平均、標準偏差)を返します。簡単な問題のように思われるものは、予期せず挑戦的なエラーを与えています。複数の関数を適用したパンダグループの返り値エラー

Top15.groupby('Continent')['Pop Est'].agg(np.mean, np.std...etc) 
# returns 
ValueError: No axis named <function std at 0x7f16841512f0> for object type <class 'pandas.core.series.Series'> 

は私が取得しようとしていますと、大陸と列に['size', 'sum', 'mean', 'std']

サンプルコードを設定したインデックスのDFである

import pandas as pd 
import numpy as np 

# Create df 
df = pd.DataFrame({'Country':['Australia','China','America','Germany'],'Pop Est':['123','234','345','456'],'Continent':['Asia','Asia','North America','Europe']}) 

# group and agg 
df = df.groupby('Continent')['Pop Est'].agg('size','sum','np.mean','np.std') 
+3

構文は 'agg([np.mean、np.std、...])'です。 –

+0

@IgorRaush私はそれを試み、 'DataError:集計する数値型がありません 'というデータフレームを見ると変わってしまいます。データがあることは明らかです。 – Adestin

+2

あなたのサンプルデータには、数値データではなく文字列として 'Pop Est'列があります。そのため、エラーが発生しています。 df ['Pop Est'] = df ['Pop Est'] .df ['Pop Est'] .dat ['Pop Est'] .df ['Pop Est'] ' groupby'を使用します。 – root

答えて

3

することはでき数値上の唯一の凝集サイズと合計ので、データフレームを作成するときに、数字をスティールとして入力しないでください。

df = pd.DataFrame({'Country':['Australia','China','America','Germany'],'PopEst':[123,234,345,456],'Continent':['Asia','Asia','North America','Europe']}) 

これはあなたが望むものを得ることができると思いますか?

grouped = df.groupby('Continent') 
grouped['PopEst'].agg(['size','sum','mean','std']) 


size sum mean std 
Continent    
Asia 2 357 178.5 78.488853 
Europe 1 456 456.0 NaN 
North America 1 345 345.0 NaN 
+0

私はあなたの構文を使用すると、私はまだDataErrorを取得します:集計する数値型はありません。しかし、私はちょうど 'サイズ'メソッドを使用すると、問題なく動作します。元のデータセットのPop Estカラムがタイプfloatであることを確認しました。興味深いことに、Pop Est列を.astype(np.float64)に変換して構文を使用することで成功を収めました。 – Adestin

+0

「sum」の代わりに「np.sum」を使用しているためだと思いますか? – sparrow

関連する問題