我正在尝试更新数据帧中的行,以通过使用相似性阈值来比较不同行中有多少值是相同的,从而解释缺失的数据。下面是我正在尝试的,但是尽管调用了要填充的正确行,但它并没有更新行。当前阈值是超过一半的值是相同的,因此在此示例中,它是具有 3 个或更多相似值的任何行,我正在寻找它仅返回数据帧中已经存在的值。
threshold = .5
for index1, row1 in df.iterrows():
if row1.isnull().values.any():
for index2, row2 in df.iterrows():
count = 0
for col in df.columns:
print (col)
if row1[col] == row2[col] and index1 != index2:
count = count + 1
else:
count = count
if count > threshold*len(df.columns) and count < len(df.columns):
row1.at[index1] = index2
break
我的输入数据帧如下所示,因此我正在寻找的一个例子是第 2 行应将 NaN 替换为第 1 行中的列的值:
CODE B2004 B2014 C2100 X3200 X1300
ID
20326 40.0 40.0 29.0 39.0 49.0
20338 40.0 NaN 29.0 39.0 49.0
20361 40.0 40.0 NaN 59.0 89.0
20381 40.0 40.0 NaN 59.0 NaN
20384 40.0 40.0 49.0 59.0 89.0
12385 40.0 40.0 29.0 29.0 55.0
12485 40.0 NaN NaN NaN 49.0
12492 35.0 35.0 NaN NaN 49.0
12685 35.0 35.0 29.0 39.0 49.0
12687 40.0 NaN 29.0 29.0 55.0
预期数据帧为:
CODE B2004 B2014 C2100 X3200 X1300
ID
20326 40.0 40.0 29.0 39.0 49.0
20338 40.0 40.0 29.0 39.0 49.0
20361 40.0 40.0 49.0 59.0 89.0
20381 40.0 40.0 49.0 59.0 89.0
20384 40.0 40.0 49.0 59.0 89.0
12385 40.0 40.0 29.0 29.0 55.0
12485 40.0 NaN NaN NaN 49.0
12492 35.0 35.0 29.0 29.0 49.0
12685 35.0 35.0 29.0 39.0 49.0
12687 40.0 40.0 29.0 29.0 55.0
任何想法或想法,不胜感激!
我想出了什么问题。由于行只是 df 的副本,因此它实际上并没有分配值。通过将第二行到最后一行更改为
df.loc[index1] = row2
我能够解决问题