2016-11-16 4 views
0

これは初心者の質問かもしれませんが、これを行う方法を理解するのに数時間を費やしました。 Okie、私は150の変数とターゲットを持つデータフレームを持っています。以下のようにサンプル:Pythonを使用してデータフレームに新しい計算カラムを追加する方法

train 
Out[1]: 
     var1 var2 target 
0   A  C  10.5 
1   A  D  13.5   
2   B  D  2.5  

ターゲットの平均を持つ追加された列で新しいデータフレームを作成したいと思います。 var1_newのrow1は、var1 == A、つまり12((10.5 + 13.5)/ 2)の平均を持つ必要があります。

私はこれをpythonで把握することができません。 ご協力いただければ幸いです。

train_new 
Out[2]: 
      var1 var2 target var1_new var2_new 
0   A  C  10.5  12  10.5    
1   A  D  13.5  12  8  
2   B  D  2.5  2.5  8  
+1

コードスニペット – user2693928

+0

@Nim Jを提供してください、あなたは何をしたいの詳細は明らかにしてください。 2列目の手段を3列目にしますか?あなたは(12.5 + 13.5)/ 2の例を挙げていますが、あなたのデータに12.5という数字はありません。 var1とvar2は数値で、それらが平均から欲しい列か、ターゲットから2つの新しい列を作成するときの平均値ですか? – ivan7707

+0

謝罪@ ivan7707。私はそれを訂正した。新しい変数は目標値の平均値を持つ必要があります。 Var1とVar2はカテゴリです。 –

答えて

1
variables = ['var1', 'var2'] 
for var in variables: 
    df[var + "_new"] = None 

for var in variables: 
    for k, v in df.groupby(var).mean()['target'].iteritems(): 
     df.loc[df[var] == k, var + "_new"] = v 
+0

ありがとう@Ilya V. Schurov。これは機能します。 iteritems()にitem()を変更してください.Pandasシリーズを繰り返しています。 –

+0

ええと、少なくともPython 3の 'pd.Series.items()'と 'pd.Series.iteritems()'は同じことをしているようですが(iteratorを生成します)、ドキュメントには 'iteritems()'しか書かれていないようです。さて、私はそれを置き換えました。左側のチェックマークをクリックすることで、問題が解決した場合は受諾して回答することができます。 –

関連する問題