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

时间:2020-07-06 21:24:45

标签: python pandas dataframe

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

任何想法或想法都会受到赞赏!

1 个答案:

答案 0 :(得分:0)

我弄清楚出了什么问题。由于row只是df的副本,因此实际上并没有分配值。通过将第二行到最后一行更改为

df.loc[index1] = row2

我能够解决问题