2017-02-14 4 views
1

Я новичок в python и работаю с набором данных titanic для kaggle.Как заполнить значения для столбца в фрейме данных путем сопоставления значений из другого dataframe pandas

Я пытаюсь заполнить пару отсутствующих значений для функции кабины, используя строки, которые имеют одинаковые билеты. То есть, я хочу получить список дубликатов билетов и их соответствующее значение кабины и заменить нулевые значения на значения кабины, соответствующие одному и тому же билету.

В моем подходе я создал фреймворк данных со следующим кодом, состоящим только из одного экземпляра дубликата билета (учитывая, что билет имел значение кабины, чтобы идти вместе с ним, не имеет значения null), чтобы присвоить ему один значение кабины. Таким образом, я мог бы заполнить значения кабины в наборе тренировок (maindf) путем сопоставления.

ticket_dupl = maindf[(maindf.duplicated('Ticket')) & (maindf['Cabin'].notnull())][['Ticket','Cabin']].drop_duplicates('Ticket') 

Это дает мне dataframe длины 50 с индексом perserved, Heres первые 7 рядов:

Ticket Cabin 
88 19950 C23 C25 C27 
124 35281 D26 
137 113803 C123 
193 230080 F2 
195 PC 17569 B80 
230 36973 C83 
251 347054 G6 

Есть ли способ, чтобы заполнить некоторые значения кабины в моем maindf путем сопоставления строк билета или индексы, сохраняющие значения, для которых билеты не совпадают? Не похоже, чтобы понять из других решений вопросы, подобные моим.

Кроме того, мне было интересно, был ли более эффективный способ достичь моей цели, а не создавать тактику данных, как я. Благодарю.

ответ

1

Вы группируете Билет, чтобы группировать строки с соответствующими билетами и заполнять нулевые значения, используя first_valid_index, который возвращает первое ненулевое значение в группе.

df['Cabin'] = df.groupby('Ticket')['Cabin'].transform(lambda x: x.loc[x.first_valid_index()]) 
+0

Я получаю эту ошибку, TypeError: не может использовать индексацию меток с помощью нулевого ключа –

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