python - 计算 pandas DataFrame 中的行百分比?

标签 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%。

我的预期结果如下所示:

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

有没有简单的方法来计算这个?

最佳答案

div + 总和

对于矢量化解决方案,将沿 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

关于python - 计算 pandas DataFrame 中的行百分比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50820659/

相关文章:

python - 将 3D 矩阵转换为级联的 2D 矩阵

python - 仅当类别的所有项目都为 True 时才返回行

python - 包含计数和平均值的嵌套 Group by

python - 从 pandas 的数据框中提取唯一值和计数

python - 查找两列比较之间的唯一字符

python - SessionNotCreatedException : Message: Expected browser binary location, 但无法在默认位置找到二进制文件,没有 'moz:firefoxOptions.binary'

python isdigit() 函数为非数字字符 u'\u2466' 返回 true

python - 来自多个对象的 Django ForeignKey

python - 按列表中的值过滤 pandas DataFrame

python - 有效地将列从数据框转换为字典列表