我正在python中编写一个数据抑制脚本,其中我需要1)抑制小值(1到5之间)和2)确保在最小的聚合级别上至少隐藏了2个值。将小值替换为-1(稍后我将把它重新编码为“s”)。我创建了一个新的helper列,它计算每行('sup_cnt')中隐藏的值的数量。这样就得到了如下结果:
Subgroup cat1 cat2 cat3 sup_cnt
Group1 0 -1 0 1
Group2 -1 22 6 1
Group3 -1 14 -1 2
Group4 -1 -1 0 2
data = {'group':['group1','group2','group3','group4'],'cat1':[0,-1,-1,-1],'cat2':[-1,22,14,-1],'cat3':[0,0,-1,0],'sup_cnt':[1,1,2,3]}
df = pd.DataFrame(data)
因此,对于只隐藏了一个值的Group 1和Group 2,我希望用-1替换第二个值--最小值(包括零)。在Group 1中,将替换其中一个零;在Group 2中,6将被替换。因此结果将如下所示:
Subgroup cat1 cat2 cat3 sup_cnt
Group1 -1 -1 0 1
Group2 -1 22 -1 1
Group3 -1 14 -1 2
Group4 -1 -1 0 2
如果有多个列具有相同的最小值(如Group 1,它有2个零),我只希望替换其中的一个(不管是哪个)。
最初在R中启动,然后切换到python/panda我的想法是编写一个函数,该函数将cat值作为参数,确定这些值中的最小非负整数,循环遍历一行中的数据列,并替换该行中该最小值的第一个示例,然后中断。虽然不确定这是否是正确的方法(或者确切地说如何执行它)。有什么想法吗?
1条答案
按热度按时间1wnzp6jl1#
我希望我没理解错你的问题:
印刷品: