我有一个熊猫系列,可以有正整数(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
答案 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