1 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
如何快速檢查similar_for_row3 和similar_for_row4 中的這些行是否在Dataframe 中,例如'name' = 10 和'name' = 20 不在其中。
您可以sets使用&和 usesorted設(shè)置找到兩者的交集,key= similar_for_row3.index以便使用出現(xiàn)的第一個(gè)交集similar_for_row3:
similar_for_row4 = [2, 6, 20]
fill_with = sorted(list(set(similar_for_row4) & set(test.name.values)),
key= similar_for_row4.index)[0]
#2
所以這里第 2 行將用于替換第 4 行,正如您提到的“數(shù)據(jù)幀中存在的第一行”。
用相似行中的值快速替換一行中的 NaN 值。例如,對(duì)于row3,我們首先檢查similar_for_row3中的所有行,然后使用Dataframe中存在的第一行(即test.loc[test['name' == 3]])替換row3中的NaN。
您可以首先使用.isnull()在特定行上切片的數(shù)據(jù)幀創(chuàng)建一個(gè)掩碼,并在數(shù)據(jù)幀上執(zhí)行布爾索引以過(guò)濾對(duì)應(yīng)列,在本例中為第 2 行:
row = 4
mask = test.loc[row, :].isnull().squeeze()
test.loc[row, mask] = test.loc[fill_with, mask].values
因此,對(duì)于此示例,您將擁有:
name col1 col2 col3 col4
0 1 c1 4.0 7.0 7.0
1 2 c2 5.0 8.0 8.0
2 3 c3 6.0 9.0 9.0
3 4 c4 NaN NaN NaN
4 5 c5 6.0 9.0 9.0
5 6 c6 8.0 3.0 2.0
6 7 c7 5.0 7.0 6.0
更新
為了輕松檢測(cè)存在任何 NaN 的行,您可以執(zhí)行以下操作:
has_nans = test[test.isnull().any(axis=1)].index.values
并且簡(jiǎn)單地循環(huán)has_nans查找在每次迭代中替換的最相似的行。
添加回答
舉報(bào)