Заменить -1 в серии pandas уникальными значениями - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть серия pandas, которая может иметь положительные целые числа (0, 8, 10 и т. Д. c) и -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. Какой самый питонский c способ сделать это?

Вот ожидаемый результат:

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 Ответ

2 голосов
/ 01 апреля 2020

Идея состоит в том, чтобы создать все возможные значения с помощью 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...