Вычислить проценты строк в пандах DataFrame? - PullRequest
0 голосов
/ 12 июня 2018

У меня есть данные в панде DataFrame, и они выглядят следующим образом:

cat  val1   val2   val3   val4
A    7      10     0      19
B    10     2      1      14
C    5      15     6      16

Я бы хотел вычислить процентную долю категории (cat), которую имеет каждое значение.

Например, для категории A, val1 равно 7, а общее количество строк равно 36. Результирующее значение будет 7/36, поэтому val1 составляет 19,4% от категории A.

Мой ожидаемый результат будет выглядеть следующим образом:

cat  val1   val2   val3   val4
A    .194   .278   .0     .528
B    .370   .074   .037   .519
C    .119   .357   .143   .381

Есть ли простой способ вычислить это?

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

div + sum

Для векторизованного решения разделите фрейм данных вдоль axis=0 на его сумму по axis=1.Вы можете использовать set_index + reset_index, чтобы игнорировать столбец идентификатора.

df = df.set_index('cat')
res = df.div(df.sum(axis=1), axis=0)

print(res.reset_index())

  cat      val1      val2      val3      val4
0   A  0.194444  0.277778  0.000000  0.527778
1   B  0.370370  0.074074  0.037037  0.518519
2   C  0.119048  0.357143  0.142857  0.380952
0 голосов
/ 12 июня 2018

Вы можете сделать это, используя apply:

df[['val1', 'val2', 'val3', 'val4']] = df[['val1', 'val2', 'val3', 'val4']].apply(lambda x: x/x.sum(), axis=1)


>>> df
  cat      val1      val2      val3      val4
0   A  0.194444  0.277778  0.000000  0.527778
1   B  0.370370  0.074074  0.037037  0.518519
2   C  0.119048  0.357143  0.142857  0.380952
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...