2017-01-16 9 views
0

私はパンダには新しく、クラスにも使っていますが、パンダには精通していません。パンダ集計

のは、私のようなデータフレームを持っているとしましょう:

accord = pd.Series({'Manufacturer' : 'Honda', 
       'Model' : 'Accord', 
       'Drivetrain': 'FWD'}) 

civic = pd.Series({'Manufacturer' : 'Honda', 
        'Model' : 'Civic', 
        'Drivetrain': 'FWD'}) 


focus = pd.Series({'Manufacturer' : 'Ford', 
        'Model' : 'Focus', 
        'Drivetrain': 'FWD'}) 

mustang = pd.Series({'Manufacturer' : 'Ford', 
        'Model' : 'Mustang', 
        'Drivetrain': 'RWD'}) 

cars_df = pd.DataFrame([accord, civic, focus, mustang]) 

そして、私は最終的に取得しようとしているが、合計各メーカーのモデルとどのように多くの彼らが作る前輪駆動車を含むリストです。

だから、私はシリーズを引き出し、新しいデータフレームを作る:

manufacturer_s = cars_df['Manufacturer'].unique() 
manufacturer_df = pd.DataFrame(index=manufacturer_s) 

私は私が求める情報のための空の列を追加します

manufacturer_df['FWD MODEL COUNT'] = 0 
manufacturer_df['MODEL COUNT'] = 0 

をそして、私は移入する「iterrows」を使用このデータを次のように

for manufacturer, row in manufacturer_df.iterrows(): 
    row['MODEL COUNT'] = 
      len(cars_df[cars_df['Manufacturer'] == manufacturer]) 
    row['FWD MODEL COUNT'] = 
      len(cars_df[(cars_df['Manufacturer'] == manufacturer) & 
         (cars_df['Drivetrain'] == 'FWD')]) 

は今、私の出力は次のようになります。

 FWD MODEL COUNT MODEL COUNT 
Honda    2   2 
Ford     1   2 

(編集:私はタイプミスを見つけたので、この部分はうまくいきます)今は冗長で(しかも潜在的に遅いですが)、それほど「パンダエスク」は感じません。

はまた、私は次のことを試してみました:

まったく動作しない...だから、私は(さらに)これとどのように行う必要があります
manufacturer_df['MODEL COUNT'] = manufacturer_df.apply(lambda car: 
     len(cars_df[cars_df['Manufacturer'] == car.index]), axis=1) 
manufacturer_df['FWD MODEL COUNT'] = manufacturer_df.apply(lambda car: 
    len(cars_df[(cars_df['Manufacturer'] == car.index) & 
       (cars_df['Drivetrain'] == 'FWD')]), axis=1) 

私が間違って何をやっていますか?

+0

あなたはおそらく*合計*代わりに* lenを*します。それについて考えてみてください。 –

答えて

1

groupby().agg()を使用して、異なる集計関数で各列を集計できます。あなたはpd.Series.nuniqueで、各メーカーのためのユニークなモデルを計算し、各グループごとにx == "FWD"にtruesの数をカウントすることにより、FF車の合計数を計算することができます

(cars_df.groupby("Manufacturer").agg({"Model": "nunique",  
             "Drivetrain": lambda x: (x == "FWD").sum()})) 

#    Model Drivetrain 
#Manufacturer  
#  Ford  2    1 
#  Honda  2    2 
関連する問題