Python 如何通过匹配来自另一个数据帧的值来填充数据帧中某列的值

Python 如何通过匹配来自另一个数据帧的值来填充数据帧中某列的值,python,pandas,Python,Pandas,我是python新手,正在使用kaggle titanic数据集进行练习 我试图通过使用具有相同票证的行来填充cabin特性缺少的几个值。也就是说,我想得到一个重复票及其对应的客舱值的列表,并用对应于同一张票的客舱值替换空值 在我的方法中,我使用以下代码创建了一个数据帧,该数据帧只包含重复票证的一次出现(假定票证附带一个CAB值;为非空),以便为其分配一个CAB值。这样,我可以通过匹配在训练集(maindf)中填写座舱值 ticket_dupl = maindf[(maindf.duplicat

我是python新手,正在使用kaggle titanic数据集进行练习

我试图通过使用具有相同票证的行来填充cabin特性缺少的几个值。也就是说,我想得到一个重复票及其对应的客舱值的列表,并用对应于同一张票的客舱值替换空值

在我的方法中,我使用以下代码创建了一个数据帧,该数据帧只包含重复票证的一次出现(假定票证附带一个CAB值;为非空),以便为其分配一个CAB值。这样,我可以通过匹配在训练集(maindf)中填写座舱值

ticket_dupl = maindf[(maindf.duplicated('Ticket')) & (maindf['Cabin'].notnull())][['Ticket','Cabin']].drop_duplicates('Ticket')
这给了我一个长度为50且索引保持不变的数据帧,以下是前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
有没有办法通过匹配票证行或索引,保留票证不匹配的值,来填充my maindf中的某些CAB值?似乎无法从其他类似于我的问题的解决方案中理解


另外,我想知道是否有一种更有效的方法来实现我的目标,而不是像我那样创建数据帧。谢谢。

您可以按票证分组,将具有匹配票证的行分组,并使用返回组中第一个非空值的第一个有效索引填充空值

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

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