2017-10-03 5 views
1

私はpython 3とpandasを初めて使用しています。私は値が2つの既存の列の違いであるデータフレームに新しい列を追加しようとしました。 私の現在のコードは次のとおりapply()関数を使用して新しい列に新しい値を生成する

import pandas as pd 
import io 
from io import StringIO 
x="""a,b,c 
1,2,3 
4,5,6 
7,8,9""" 

with StringIO(x) as df: 
    new=pd.read_csv(df) 

print (new) 

y=new.copy() 

y.loc[:,"d"]=0 

# My lambda function is completely wrong, but I don't know how to make it right. 

y["d"]=y["d"].apply(lambda x:y["a"]-y["b"], axis=1) 

所望の出力である

ABCD

1 2 3 -1

4 5 6 -1

7 8 9 -1

私のコードをどのように動作させることができるのでしょうか?

ありがとうございました。

答えて

1

あなたが行のみによる処理のためのaxis=1DataFrame.applyためDataFrameためyが必要になります。より良いデバッグのため

y["d"]= y.apply(lambda x:x["a"]-x["b"], axis=1) 

が可能なカスタム関数を作成:のみが必要な場合

def f(x): 
    print (x) 
    a = x["a"]-x["b"] 
    return a 

y["d"]= y.apply(f, axis=1) 

a 1 
b 2 
c 3 
Name: 0, dtype: int64 
a 4 
b 5 
c 6 
Name: 1, dtype: int64 
a 7 
b 8 
c 9 
Name: 2, dtype: int64 

よりよい解決策を列を引く:

y["d"] = y["a"] - y["b"] 

print (y) 
    a b c d 
0 1 2 3 -1 
1 4 5 6 -1 
2 7 8 9 -1 
+0

ご返信ありがとうございました。それは実際に動作します。この場合、xが何を表しているか尋ねてもいいですか?それはyの各行を意味するのでしょうか? – derec

+0

正確には、 'axis = 1'のため、各行にあります。 'axis = 0'なら、それはそれぞれの列です。 – jezrael

関連する問題