2017-03-04 10 views
1

データフレームをループし、複雑な計算の金利でフレームの列を埋めるとします。どうやら、フレームをループする最良の方法は、iterrowsを使用することです - しかし、私はiterrowsを使用する場合、私は整数値のみを取得する:すべての値ことを考えると、なぜiterrowsは数学を行うのではなく、浮動小数点数を返す整数値を返します

import pandas 
df = pandas.DataFrame({"A": [1,2,3,4,5]}) 
df['B']=0 
for index, row in df.iterrows(): 
    row['B']=row['A']*10.05 
df 

戻り

間違っている
A B 
0 1 10 
1 2 20 
2 3 30 
3 4 40 
4 5 50 

Aで10.05を掛けた。

以下の例では、正しい結果を与える:

df['B']=df['A']*10.05 

    A  B 
0 1 10.05 
1 2 20.10 
2 3 30.15 
3 4 40.20 
4 5 50.25 

としては、計算が複雑であるので、この方法を使用することは容易ではない、と述べました。

正しい結果を得るためにiterrowsを使用できますか?

答えて

1

あなたがlocとスカラー値を割り当てる必要があると思われる(atix):

for index, row in df.iterrows(): 
    df.loc[index, 'B'] =row['A']*10.05 
print (df) 
    A  B 
0 1 10.05 
1 2 20.10 
2 3 30.15 
3 4 40.20 
4 5 50.25 

しかし、より良いは、カスタム関数でapplyを使用している:

df = pandas.DataFrame({"A": [1,2,3,4,5]}) 


def f(x): 
    x['B'] = x.A * 10.05 
    #another code 
    return x 

df = df.apply(f, axis=1) 
print (df) 
    A  B 
0 1.0 10.05 
1 2.0 20.10 
2 3.0 30.15 
3 4.0 40.20 
4 5.0 50.25 
+0

おかげで、ループ作品!私はapply関数を調べるフォローアップを追加し、それも解決できるかどうかを見てみましょう。 –

+0

ここを参照してください私のフォローアップ、この[リンク](http://stackoverflow.com/questions/42601765/how-to-efficiently-fill-a-column-of-dataframe-with-values-calculated-from-other )。 –

+0

ありがとうございますが、今私は寝るつもりです。しかし、1つのアドバイス - あなたの新しい質問にタグのパンダを追加する。がんばろう! – jezrael

関連する問題