将熊猫系列中的-1替换为唯一值

时间:2020-04-01 13:48:59

标签: python pandas numpy

我有一个熊猫系列,可以有正整数(0、8、10等)和-1s:

id      values
1137    -1
1097    -1
201      8
610     -1
594     -1
727     -1
970     21
300     -1
243      0
715     -1
946     -1
548      4
Name: cluster, dtype: int64

我想用序列中不存在的值和它们之间唯一的值替换那些-1,换句话说,我不能用例如90填充两次。最Python的方式是什么要这样做吗?

这是预期的输出:

id      values
1137     1
1097     2
201      8
610      3
594      5
727      6
970     21
300      7
243      0
715      9
946     10
548      4
Name: cluster, dtype: int64

1 个答案:

答案 0 :(得分:2)

想法是通过np.arange创建所有可能的值,并为正数添加更多的值,然后与正数求和并设置为过滤列:

m = df['values'] != -1

s = np.setdiff1d(np.arange(len(df) + m.sum()), df.loc[m, 'values'])
df.loc[~m, 'values'] = s[:(~m).sum()]
print (df)
      id  values
0   1137       1
1   1097       2
2    201       8
3    610       3
4    594       5
5    727       6
6    970      21
7    300       7
8    243       0
9    715       9
10   946      10
11   548       4