2017-03-29 2 views
1

새 열 적용팬더 내가 이런 dataframe이

import pandas as pd 
import numpy as np 
df=pd.DataFrame({'c1':[1,2,4,5], 
       'c2':[3,'P','N','T'], 
       'c3':np.nan}) 

df :

c1 c2 c3 
0 1 3 NaN 
1 2 P NaN 
2 4 N NaN 
3 5 T NaN 

내가 c2 열을 기준으로 c3 값을 변경하려면 :

결과 내가 원했던 것 :

c1 c2 c3 
0 1 3 NaN 
1 2 P 1.0 
2 4 N 3.0 
3 5 T 5.0 
나도 같은 결과를 얻을 수 apply 기능을 사용하려면

df1=df[df.c2 == 'P'] 
df1['c3'] =1 
df2=df[df.c2 == 'N'] 
df2['c3'] =3 
df3=df[df.c2 == 'T'] 
df3['c3'] =5 
df4=df[(df.c2 != 'N') & (df.c2 != 'P') & (df.c2 != 'T')] 
new_df=pandas.concat([df1,df2,df3,df4]).reset_index() 
new_df[['c1','c2','c3']] 

:

나는이 결과를 얻기 위해 concat를 사용합니다. 나는 new_col 기능을 변경하는 방법

def new_col(x,df): 

    if x== 'P': 
     df['c3'] = 1 
    elif x == 'N': 
     df['c3'] = 3 
    elif x == 'T': 
     df['c3'] =5 
    else: 
     df['c3']=np.nan 
df.c2.apply(new_col,df=df) 
df 

: 나는 apply 기능을 사용할 때 항상 전체 c3 열을 대체?

답변

1

당신은 사용할 수 있습니다

def new_col(x): 
    a = np.nan 
    if x == 'P': 
     a = 1 
    elif x == 'N': 
     a = 3 
    elif x == 'T': 
     a = 5 
    return a 

df['c3'] = df.c2.apply(new_col) 
print (df) 
    c1 c2 c3 
0 1 3 NaN 
1 2 P 1.0 
2 4 N 3.0 
3 5 T 5.0 

또 다른 해결책 :

df.loc[df.c2 == 'P', 'C3'] = 1 
df.loc[df.c2 == 'N', 'C3'] = 3 
df.loc[df.c2 == 'T', 'C3'] = 5 
print (df) 
    c1 c2 c3 C3 
0 1 3 NaN NaN 
1 2 P NaN 1.0 
2 4 N NaN 3.0 
3 5 T NaN 5.0 
관련 문제