如何返回一个新的数据框,其中数字代表其包含行的百分比[重复]
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
【讨论】:
以上是关于如何返回一个新的数据框,其中数字代表其包含行的百分比[重复]的主要内容,如果未能解决你的问题,请参考以下文章