2017-02-14 94 views
1

我是python的新手,并且正在与kaggle titanic数据集一起练习。如何通过匹配来自另一个数据框的值填充数据框中的列值pandas

我试图通过使用具有相同票据的行来填充舱内功能的一对缺失值。也就是说,我想获取重复机票及其相应机舱值的列表,并将空值替换为与相同机票相对应的机舱值。

在我的方法中,我创建了一个数据框,其中包含以下代码,其中只包含一次出现的重复票证(假设票证有一个舱位值与它一起;非空),以便为其分配一个机舱值。这样我就可以通过匹配来填充训练集(maindf)中的机舱值。

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

这让我长50指数的数据帧perserved,继承人的前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填充空值,该first_valid_index返回组中的第一个非空值。

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

我得到这个错误,TypeError:不能使用带有空键的标签索引 –