如何将调查结果转换为python熊猫中受访者总数的百分比?

时间:2018-12-17 10:00:46

标签: python pandas

2,233名受访者进行了调查,以下结果列在以下各列Very interestedSomewhat interestedNot interested

                    Very interested  Somewhat interested  Not interested 

A.                        1688,                444,               60,

B                         1629,                477,               74,

C                         1340,                734,              102,

D                         1332,                729,               127, 

E                         1263,                770,               136, 

如何将这些数字转换为被调查者总数的百分比,即2,233,并将百分比舍入到小数点后2位?

4 个答案:

答案 0 :(得分:1)

使用示例数据,我删除了逗号,以便可以将其转换为整数,然后将实际值与百分比交换:

for col in list(df):
    df[col] = df[col].str.replace(',','')
    df[col] = pd.to_numeric(df[col])

(100. * df / 2233).round(2)

输出:

    Very interested     Somewhat interested     Not interested
A.  75.59                  19.88                    2.69
B   72.95                  21.36                    3.31
C   60.01                  32.87                    4.57
D   59.65                  32.65                    5.69
E   56.56                  34.48                    6.09

答案 1 :(得分:0)

编辑

我只是用您提供的数据编写了一个小的excel文件,它可以正常工作:

我使用了以下excel文件:

void QMainWindows::resizeEvent(QResizeEvent *){
QRectF bounds = ui->graphQSYS->scene()->sceneRect();
ui->graphQSYS->fitInView(bounds, Qt::KeepAspectRatioByExpanding);
ui->graphQSYS->centerOn(bounds.center());
}

和代码:

        Very Interested        Somewhat Interested        Not Interested

A           1688                       444                      60

B           1629                       477                      74

C           1340                       734                     102

D           1332                       729                     127

因此,首先我将我的excel文件加载并使其成为pandas Dataframe,然后将所有整数强制转换为浮点数,因此在存储2点浮点数时,小数点将不会被截断。然后遍历所有索引和列进行数学运算并将其存储在正确的位置。然后就完成了。为我工作

如果要将数据框保存回excel文件,则可以这样操作:

df = pandas.read_excel('./test.xlsx', sep=',', delimiter=None)
df = df.astype(float)
df = (100. * df/2233).round(2)

答案 2 :(得分:0)

对于您而言,我相信下面的代码会有所帮助。

df=(df/2233).style.format("{:.2%}")

The result

答案 3 :(得分:-1)

df = df.astype(float)
df = (df/2233).round(2)