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查找在每次迭代中替换的最相似的行。
添加回答
举报