1

大家。我需要匿名化 原始表以制作匿名表。换句话说,我需要用星号替换非重复的集合。

实际上,我已经运行了这段代码:

    for j in range(len(zz_new)):
        for i in range(len(zz)):
            if zz_new.iloc[j][0] != zz.iloc[i][0]:
                zz_new.iat[j,0]="*"

            if zz_new.iloc[j][1] != zz.iloc[i][1]:
                zz_new.iat[j,1]="*"

            if zz_new.iloc[j][2] != zz.iloc[i][2]:
                zz_new.iat[j,2]="*"

            if zz_new.iloc[j][3] != zz.iloc[i][3]:
                zz_new.iat[j,3]="*"

            if zz_new.iloc[j][4] != zz.iloc[i][4]:
                zz_new.iat[j,4]="*"

,但结果是这样的 我的匿名表。我想知道你能不能帮我找到匿名表

4

2 回答 2

0

您需要做的是遍历每一行并找出哪些行是重复的。有很多方法可以做到这一点,但蛮力算法看起来像这样:

  • 启动一个跟踪 non_duplicate_id 的空列表
  • 遍历每一行并检查是否有一行与当前元素完全相似。
  • 如果,则有一个完全相同的元素什么也不做,如果不是,则将此行的 id 添加到 non_duplicate_id 列表中。
  • 遍历您的 non_duplicate_id 列表并将每一行设置为两个感兴趣领域(年龄和教育)的星号
  • 保存新的匿名表

但是,此解决方案在第 2 步和第 3 步进行了大量冗余查找,如果数据集的大小很大,它可能无法很好地扩展。

于 2019-12-28T06:28:21.620 回答
0

使用 value_counts() 方法:

df                                                                                                                   
     age  education
0  30-39    HS-grad
1  40-49  Bachelors
2  30-39    HS-grad
3  30-39       11th

vcnt= df.education.value_counts().eq(1)                                                                              

HS-grad      False
Bachelors     True
11th          True
Name: education, dtype: bool

df["education"]= df.education.replace(vcnt.loc[vcnt].index,"*")                                                      

     age education
0  30-39   HS-grad
1  40-49         *
2  30-39   HS-grad
3  30-39         *
于 2019-12-28T13:28:56.093 回答