计算pandas DataFrame中的行百分比?

时间:2018-06-12 15:21:36

标签: python pandas dataframe

我在pandas DataFrame中有我的数据,它看起来如下:

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

我想计算每个值所具有的类别(cat)的百分比。

例如,对于类别Aval1为7,行总数为36.结果值为7/36,因此val1为类A的19.4% 1}}。

我的预期结果如下:

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

有一种简单的方法来计算它吗?

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

您可以使用exchange

执行此操作
apply