2017-07-04 10 views
2

csv(下のサンプル)は、ある週(week_end_date)のアイテムの絶対エラーを示しています。 CSVが示すように、アイテムは部門に属し、部門が複数の項目があります。ここではグループに基づいて新しいパンダデータフレームを作成する

mdse_dept_ref_i  week_end_date  average_ABSError  num_items_in_department 

enter image description here

を私は何をしたい、次のフィールドを持つ新しいデータフレームを作成することです私が行うことができる午前です:最終的に私が見たいと思っているので、私は、単一のデータフレームを作成するために、すべての部門のためにこれを自動的に行う方法がわからない、

new_df = df.loc[df['mdse_dept_ref_i'] == 47] 
num_items = new_df.groupby('week_end_date').size() 

avg_abs_error = new_df.groupby(['week_end_date'])['ABSError'].mean() 
new_df = num_items.to_frame().join(avg_abs_error.to_frame()) 

をしかし、どのようにあるアイテムの数部門はavに影響を与えているまた、最悪の結果を出す部門を見ることができます。また、groupby('week_end_date')を実行すると、week_end_dateがインデックスになりますが、私はそれを新しいデータフレームのフィールドにしたいので、プロット中に使うことができます。誰か助けてくれますか?

+1

"いくつかのプロットは、" 正確には、何を意味するのでしょうか? –

+0

あなたの質問はあまり明確ではありません。あなたは、あなたが望むデータフォーマットに関するいくつかの例を挙げることができますか? – Jacobm001

+0

@MadPhysicist:更新された質問 – user1274878

答えて

0

パンダGROUPBYは、複数のフィールドでグループに次のことが可能です。

g = df.groupby(['mdse_dept_ref_i','week_end_date']) 
num_items = g.size().to_frame('num_items') 
avg_abs_error = g['ABSError'].mean() 
df0 = pd.concat((num_items,avg_abs_error), axis = 1).reset_index() 
df.merge(df0) 

あなたが実際に.groupbyへの引数as_index = Falseを渡すことができますが、.size()を使用している場合、これは効果がありませんので、我々はリセットする必要がありインデックスは後で

私はあなたが元 dfgroupby + agg、その後、 rename列と最後 joinが必要だと思う
0

df1 = df.groupby(['mdse_dept_ref_i','week_end_date'])['ABSError'].agg(['size','mean']) 
d = {'size':'total', 'mean':'ABSError mean'} 
df1 = df1.rename(columns=d) 
print (df1) 
           total ABSError mean 
mdse_dept_ref_i week_end_date      
47    3/25/17   3  39.988728 
80    3/25/17   1  1.791748 
204    3/25/17   1 12975.863000 

df = df.join(df1, on=['mdse_dept_ref_i','week_end_date']) 
print (df) 
    mdse_item_i mdse_clas_i mdse_dept_ref_i actual_sls week_end_date \ 
0  19084539   30    47   0  3/25/17 
1  19517957   43    47   3  3/25/17 
2  19378250   0    204  1644  3/25/17 
3  19704764   43    47   0  3/25/17 
4  19119951   8    80   17  3/25/17 

    rnn_fcst_sls forecast_release_date  ABSError total ABSError mean 
0  48.520298    3/31/17  48.520298  3  39.988728 
1  44.795605    3/31/17  41.795605  3  39.988728 
2 14619.863000    3/31/17 12975.863000  1 12975.863000 
3  29.650280    3/31/17  29.650280  3  39.988728 
4  18.791748    3/31/17  1.791748  1  1.791748 
関連する問題