2017-10-03 3 views
1

저는 python 3 및 pandas를 처음 사용합니다. 값이 기존의 두 열 사이의 차이 인 데이터 프레임에 새 열을 추가하려고했습니다. 나의 현재 코드 :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

내 코드 작업을 어떻게 만들 수 있습니까?

도움 주셔서 감사합니다. 당신은 행에 의해 프로세스 axis=1DataFrame.applyDataFrame에 대한 y 필요

답변

1

는 : 더 나은 디버깅

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

관련 문제