如何返回一个新的数据框,其中数字代表其包含行的百分比[重复]

Posted

技术标签:

【中文标题】如何返回一个新的数据框,其中数字代表其包含行的百分比[重复]【英文标题】:How to return a new dataframe where numbers represent a percent of their containing row [duplicate] 【发布时间】:2022-01-20 18:29:48 【问题描述】:

使用 Python 和 Pandas,我有一个用数值填充的数据框。我正在尝试做的,但不知道如何返回一个新的数据框,其中每个数字代表该行的百分比

基本上我需要的是返回一个新数据帧,其中旧数据帧中的数字被更改以表示它们在整个特定行中所代表的百分比。希望这是有道理的。

以下是起始数据框的示例,每行总计 10 以使示例简单易行

             ambivalent   negative   neutral  positive
11/15/2021       6          2             1       1
11/8/2021        4          1             2       3

我想要达到的就是这个

                 ambivalent   negative   neutral  positive
11/15/2021       60%          20%           10%       10%
11/8/2021        40%          10%           20%       30%

我不需要实际的 % 符号,只需要实际的百分比数字即可。

有人可以为我指出正确的方向吗?

【问题讨论】:

只需除以行总和:new_df = df.div(df.sum(axis=1), axis=0) 如果需要,您也可以乘以 100 new_df = df.div(df.sum(axis=1), axis=0) * 100 如果你真的想要百分比可以做到new_df = df.div(df.sum(axis=1), axis=0).mul(100).astype(str).add('%') like this answer 如果您需要数值进行计算,您也可以使用显示设置而不是使它们成为字符串。见this answer 和Options and settings。 【参考方案1】:

您可以将.apply() 方法与 lambda 函数一起使用:

result = df.apply(lambda row: row/sum(row)*100,axis=1)

例子:

df = pd.DataFrame('a':[2,3],'b':[3,5],'c':[5,2])
result = df.apply(lambda row: row/sum(row),axis=1)

df 是:

   a  b  c
0  2  3  5
1  3  5  2

result 是:

      a     b     c
0  20.0  30.0  50.0
1  30.0  50.0  20.0

【讨论】:

以上是关于如何返回一个新的数据框,其中数字代表其包含行的百分比[重复]的主要内容,如果未能解决你的问题,请参考以下文章

遍历数据框进行计算

比较熊猫数据框中的行值

如何在 MYSQL 中选择包含所有字母和数字的行?

如何列出属于一组范围内的所有数字对?

如何按字符串过滤熊猫数据框?

Pandas - 你如何基于另一个数据框创建一个新的数据框?