下面是一个更大的数据框的示例。
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