2014-09-10 8 views
1

I이 파이썬 팬더에서 다음 데이터 프레임 :파이썬 팬더

current_data = pd.DataFrame({'X': ['3'+'*NY', '3', '2', '2'+'*NY', '1', '7'], 'Y': [np.nan, 4, 5, np.nan, 8, np.nan]}) 

내가 얻고 싶은 것은 : 그래서

needed_data = pd.DataFrame({'X': ['3'+'*NY', '3', '2', '2'+'*NY', '1', '7'], 'Y': [4, 4, 5, 5, 8, np.nan]}) 

, 내가 "* NY"부분이있는 X의 관측치에 해당하는 Y 열의 N을, 같은 숫자 부분을 가지나 "* NY"가없는 X의 관측치에 해당하는 Y의 숫자로 바꾼다.

+0

귀하의 코드가 실행되지 않습니다 및 당신이 원하는 게시 할 수있는 코드가 작동해야 출력 – EdChum

+0

조금 불분명하다 지금. 파이썬 출력을 게시하는 방법을 모르므로 코드로 게시했습니다. – izhak

+0

코드가 작동하지 않아 원하는 출력을 시각화 할 수 없으므로 이제 할 수 있습니다. 그러나 당신의 설명은 혼란 스럽습니다.'NaN' 인 Y 값에 대해 'X'값이'3xNY'의 숫자 구성 요소와 일치하는 경우 해당 Y 값을 조회하려고합니다. – EdChum

답변

1

이것은 코드에 더 성가신 약간, 기본적으로 우리는 당신을위한 조회를 수행하는 사용자 정의 기능을 적용 할 수 있습니다

In [106]: 
# define our function 
def func(x): 
    # test to see if the asterisk is present 
    if x.find('*') > 0: 
     # perform a lookup on a slice of the passed in string 
     return(current_data.loc[current_data.X==x[0:x.find('*')],'Y'].values.max()) 
# using loc assign to column 'Y' where it is null the returned calculation of the apply 
current_data.loc[current_data.Y.isnull(),'Y'] = current_data[current_data.Y.isnull()]['X'].apply(func) 
current_data 
Out[106]: 
     X Y 
0 3*NY 4 
1  3 4 
2  2 5 
3 2*NY 5 
4  1 8 
5  7 NaN 
+0

입니다. 실제로 작동합니다 :) 감사합니다. 작동하는 데 1 시간 정도를 기울여야한다고 생각합니다. 그러나 어쨌든 감사합니다. – izhak