Как использовать значения, возвращаемые value_counts (), для дальнейших вычислений? - PullRequest
2 голосов
/ 11 мая 2019

У меня есть столбец с именем y_ocsvm, который заполнен 1 и -1 в df с именем step1.

Я использовал: step1['y_ocsvm'].value_counts(), чтобы получить количество единиц и -1, и результат был:

step1['y_ocsvm'].value_counts()
Out[11]: 
 1    1622
-1     426
Name: y_ocsvm, dtype: int64

Я бы хотел найти отношение количества -1 к числу 1. Я мог бы просто сделать 426/1622, но, поскольку мне пришлось использовать это для многих информационных фреймов, значения будут определенно меняться, что затруднит их вычисление вручную.

Поскольку value_counts() можно применять только к сериям панд, я попытался сделать:

pd.Series([step1['y_ocsvm'] == -1]).value_counts()

Но я получаю следующую ошибку:

pd.Series([step1['y_ocsvm'] == -1]).value_counts()
Traceback (most recent call last):

  File "<ipython-input-13-59f772263a54>", line 1, in <module>
    pd.Series([step1['y_ocsvm'] == -1]).value_counts()

  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\core\base.py", line 1303, in value_counts
    normalize=normalize, bins=bins, dropna=dropna)

  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\core\algorithms.py", line 705, in value_counts
    keys, counts = _value_counts_arraylike(values, dropna)

  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\core\algorithms.py", line 750, in _value_counts_arraylike
    keys, counts = f(values, dropna)

  File "pandas/_libs/hashtable_func_helper.pxi", line 348, in pandas._libs.hashtable.value_count_object

  File "pandas/_libs/hashtable_func_helper.pxi", line 359, in pandas._libs.hashtable.value_count_object

  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\core\generic.py", line 1816, in __hash__
    ' hashed'.format(self.__class__.__name__))

SystemError: <built-in method format of str object at 0x00000203B7063AC0> returned a result with an error set

Я хотел бы знать, как это можно сделать с помощью панд?

Ответы [ 2 ]

3 голосов
/ 11 мая 2019

Здесь Series конструктор не нужен, потому что step1['y_ocsvm'] == -1 равен Series, заполнен логическими значениями:

out = (step1['y_ocsvm'] == -1).value_counts()

Для отношения возможно использование:

print (out[True] / out[False])
2 голосов
/ 11 мая 2019

Вы также можете сделать

step1['y_ocsvm'].value_counts()[-1] / step1['y_ocsvm'].value_counts()[1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...