1 回答

TA貢獻1829條經驗 獲得超7個贊
如何快速檢查similar_for_row3 和similar_for_row4 中的這些行是否在Dataframe 中,例如'name' = 10 和'name' = 20 不在其中。
您可以sets使用&和 usesorted設置找到兩者的交集,key= similar_for_row3.index以便使用出現的第一個交集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 行,正如您提到的“數據幀中存在的第一行”。
用相似行中的值快速替換一行中的 NaN 值。例如,對于row3,我們首先檢查similar_for_row3中的所有行,然后使用Dataframe中存在的第一行(即test.loc[test['name' == 3]])替換row3中的NaN。
您可以首先使用.isnull()在特定行上切片的數據幀創建一個掩碼,并在數據幀上執行布爾索引以過濾對應列,在本例中為第 2 行:
row = 4
mask = test.loc[row, :].isnull().squeeze()
test.loc[row, mask] = test.loc[fill_with, mask].values
因此,對于此示例,您將擁有:
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
更新
為了輕松檢測存在任何 NaN 的行,您可以執行以下操作:
has_nans = test[test.isnull().any(axis=1)].index.values
并且簡單地循環has_nans查找在每次迭代中替換的最相似的行。
添加回答
舉報