下面是一个更大的数据框的示例。

       Fare      Cabin  Pclass  Ticket  Name
257     86.5000     B77     1   110152  Cherry, Miss. Gladys
759     86.5000     B77     1   110152  Rothes, the Countess. of (Lucy Noel Martha Dye...
504     86.5000     B79     1   110152  Maioni, Miss. Roberta
262     79.6500     E67     1   110413  Taussig, Mr. Emil
558     79.6500     E67     1   110413  Taussig, Mrs. Emil (Tillie Mandelbaum)
585     79.6500     NaN     1   110413  Taussig, Miss. Ruth
475     52.0000     A14     1   110465  Clifford, Mr. George Quincy
110     52.0000     C110    1   110465  Porter, Mr. Walter Chamberlain
335     26.0000     C106    1   110469  Maguire, Mr. John Edward
158     26.5500     D22     1   110489  Borebank, Mr. John James
430     26.5500     C52     1   110564  Bjornstrom-Steffansson, Mr. Mauritz Hakan
236     75.2500     D37     1   110813  Warren, Mr. Frank Manley
366     75.2500     D37     1   110813  Warren, Mrs. Frank Manley (Anna Sophia Atkinson)
191     26.0000     NaN     1   111163  Salomon, Mr. Abraham L
170     33.5000     B19     1   111240  Van der hoef, Mr. Wyckoff
462     38.5000     E63     1   111320  Gee, Mr. Arthur H
329     57.9792     Nan     1   111361  Hippach, Miss. Jean Gertrude
523     57.9792     B18     1   111361  Hippach, Mrs. Louis Albert (Ida Sophia Fischer)

如果我想为缺少“Cabin”值的人用其他人的“Cabin”值迭代填充“Cabin”的值,则仅当

另一个人(具有舱位值的人)的姓氏相同,并且也都在自己附近(如在上方或下方)。

因此,在以上数据框中,[Tassuig,Ruth.Ruth小姐]的机舱值“Nan”将被替换为[Tassuig,Emil太太女士]的机舱值[E67],后者高于她自己,因为两个条件都遇见。 (相同的姓氏和附近)

[[Hippach,让·格特鲁德小姐]缺少的客舱价值将被替换为
[Hippach,路易斯·阿尔伯特夫人(Ida Sophia Fischer)]的机舱值[B18]。

我试图考虑迭代,但是据我所知
for x in df.Name.str.split(',')[x][0] ==df.Name.str.split(',')[x+1][0]:
    if df.Cabin[x] or df.Cabin[x+1] == np.nan:
      df.Cabin.replace(np.nan,

我想确保将np.nan值替换为True值而不是np.nan。无法弄清楚该怎么做。

谢谢。

最佳答案

groupby + fillna

# back fills, then forward fills
def bffill(x):
    return x.bfill().ffill()

# group by last name
df['Cabin'] = df.groupby(df.Name.str.split(',').str[0]).Cabin.apply(bffill)

df

pandas - 如果[名称]列中的姓氏相似,请填写另一列的缺失值-LMLPHP

09-09 20:46