2014-09-10 3 views
1

У меня есть следующий кадр данных в питона панд:Python Панды замещающие Нэн в один столбец условных наблюдений в другой колонке

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]}) 

Итак, я хотят заменить нан в столбце Y, которые соответствуют наблюдениям в X с частью «* NY», числам в Y, которые соответствуют наблюдениям в X, которые имеют одну и ту же цифровую часть, но без «* NY»

+0

Ваш код не запускается, и это немного непонятно, вы можете разместить требуемый выход – EdChum

+0

код должен работать Теперь. Мне не удалось опубликовать вывод python здесь, поэтому я опубликовал его как код – izhak

+0

Поскольку ваш код не работал, я не мог визуализировать желаемый результат, теперь я могу. Однако ваше объяснение является запутанным, для значений Y, которые являются «NaN», вы хотите найти соответствующее значение «Y», где значения «X» соответствуют числовому компоненту «3xNY» правильно? – 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

Действительно, это работает :) спасибо Я думаю, мне придется потратить час или около того, чтобы понять, как это работает, но в любом случае спасибо – izhak

Смежные вопросы