2014-11-27 2 views
0

내가이 같은 데이터 프레임이 말할 수있는 열에서 여러 열을 생성 : 지금은 세 개의 새로운 열을 즉 생성 할 경우팬더가 :.

df = 
     X 
    0 17 
    1 120 
    2 -290 

X+12, X-12X에서 X+100. 최종 df에는 X, X+12, X-12X+100의 4 개의 열이 있습니다.

어떻게해야합니까? .apply은 열을 다른 열로 변환합니다. 이 함수를 사용하여 한 열을 여러 열로 변환하는 방법은 무엇입니까? 이것을 할 수있는 방법이 있습니까?

나는 이것을 선호하는 방식으로 .apply 또는 다른 적합한 기능을 사용하는 것이 좋습니다.

편집 : 추가 정보를 잊어 버렸습니다. 이 값을 사용하고이 값에서 벡터 값을 생성하는 함수가 있습니다. 내가 좋아하는 뭔가이 사용할 수 있어야합니다 :

df[['X1','X2','X3']] = df.X.apply(f)

f이 될 것 여기서

def f(x): 
     return x+12, x-12, x+100 

내가 열이 방법을 생성 할 수 있어야합니다. 이것이 가능한가?

답변

1

그냥 여러 문을 수행

In [31]: 

df['X+12'], df['X-12'], df['X+100'] = df+12, df-12, df+100 
df 
Out[31]: 
    X X+12 X-12 X+100 
0 17 29  5 117 
1 120 132 108 220 
2 -290 -278 -302 -190 

편집

난 당신 때문에 반환 값의 형태와 기대 수익 형으로 작동하지 않습니다 무엇을 원하는 생각합니다. 당신이 df[['X1','X2','X3']] = ..를 통해 아직 존재하지 않는 열을 해결할 수 없습니다 AFAIK

In [66]: 

pd.concat([df,df.X.apply(lambda s: pd.Series({'X+12':s+12, 'X-12':s-12, 'X+100':s+100}))], axis=1) 

Out[66]: 
    X X+100 X+12 X-12 
0 17 117 29  5 
1 120 220 132 108 
2 -290 -190 -278 -302 

도 괜찮은 대답도

+0

방금 ​​내가 찾는 방법을 반영하기 위해 제 문제를 편집했습니다. – prashu

+0

난 그냥이 질문을 가로 질러 왔어 : http://stackoverflow.com/questions/16236684/apply-pandas-function-to-create-multiple-new-columns?rq=1 나는 이것이 내가 원하는 걸로 충분하다고 생각해. 나는 f의 리턴 타입을 dict로 변경해야 할 것이다. – prashu

+0

@prashu 내 편집 된 답변 (2) 답변은 해당 질문을 기반으로합니다. 즉, 자동으로 작동하는 것이 아니기 때문에 반환 유형을 강제 변환 한 후 나중에 병합/연결해야합니다. – EdChum

2

입니다 @der_die_das_jojo : 또 다른 방법은 람다을 적용하고 결과를 연결하는 것입니다. 다음과 같이 작동합니다.

def f(x): 
    return x.add(12), x.sub(12), x.add(100) 
df['X+12'], df['X-12'], df['X+100'] = f(df) 
관련 문제