如何用星号(“*”)替换csv文件列中的非重复值?

How to replace non-duplicated values in columns of csv files by stars("*")?

everybody.I 需要匿名化 the raw table to make a anonymized table。换句话说,我需要用星星替换不重复的集合。

其实我有运行这个代码:

    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]="*"

,但是结果是这样的My anonymized table. I was wondering if you could help me to reach the anonymized table。

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

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

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

使用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         *