рассчитать процентную долю значения в столбце в Python

1

У меня есть следующий фрейм данных

 item1  item2    item3    
  x      y         z    
  x1     y1        z1   
  x      y2        z2   
  x      y         z1
  x2     y         z         
  x2     y1        z2     

Я хочу найти процентный вклад каждого значения в столбце ко всему значению в столбце (каков вклад x, x1, x2 в item1, тот же, что и в item2 и item3)

Ниже должен быть кадр данных результата.

item1  %con_item1  item2  %con_item2  item3 %con_item3
x          50       y        50         z       33.33
x1         16.66    y1       33.33      z1      33.33
x2         33.33    y2       16.66      z2      33.33      
Теги:
pandas

1 ответ

1

Используйте value_counts с параметром normalize параметра True:

pd.concat([df[i].value_counts(normalize=True).reset_index() for i in df.columns], axis=1)

Выход:

  index     item1 index     item2 index     item3
0     x  0.500000     y  0.500000    z1  0.333333
1    x2  0.333333    y1  0.333333    z2  0.333333
2    x1  0.166667    y2  0.166667     z  0.333333

Обновленный ответ с масштабированием и именованием столбцов:

pd.concat([df[i].value_counts(normalize=True)
                .mul(100.0)
                .rename_axis(i)
                .reset_index(name='%con_'+i)  for i in df.columns], axis=1)

Выход:

  item1  %con_item1 item2  %con_item2 item3  %con_item3
0     x   50.000000     y   50.000000    z1   33.333333
1    x2   33.333333    y1   33.333333    z2   33.333333
2    x1   16.666667    y2   16.666667     z   33.333333
  • 0
    Очень чистый ответ, красиво сделано!
  • 0
    @ user3483203 Спасибо. Ищите чистый способ назвать столбцы так, как хочет OP.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню