У меня есть следующий фрейм данных
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
Используйте 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