我试图通过使用相似性阈值比较不同行中有多少个相同值来更新数据框中的行以解决丢失的数据。下面是我正在尝试的方法,但是尽管调用了正确的行来填充,但它没有更新行。当前阈值超过了相同值的一半,因此在此示例中,它是具有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
任何想法或想法都会受到赞赏!
答案 0 :(得分:0)
我弄清楚出了什么问题。由于row只是df的副本,因此实际上并没有分配值。通过将第二行到最后一行更改为
df.loc[index1] = row2
我能够解决问题