通过基于定义的相似列值数查找相似行来更新数据框中的行值



我正在尝试更新数据帧中的行,以通过使用相似性阈值来比较不同行中有多少值是相同的,从而解释缺失的数据。下面是我正在尝试的,但是尽管调用了要填充的正确行,但它并没有更新行。当前阈值是超过一半的值是相同的,因此在此示例中,它是具有 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

我能够解决问题

最新更新