簡體   English   中英

將 Pandas dataframe 值轉換為百分比

[英]Convert Pandas dataframe values to percentage

我有一個 dataframe df我想根據列total計算百分比。

假設我有:

df = pd.DataFrame({
    'ID': range(1, 4),
    'col1': [10, 5, 10],
    'col2': [15, 10, 15],
    'col3': [10, 15, 15],
    'total': [35, 30, 40]
})

print(df)

     ID  col1 col2 col3 total
0     1    10   15   10    35
1     2    5    10   15    30
2     3    10   15   15    40

我想得到:

     ID       col1       col2       col3      total
0     1    28.57 %    42.85 %    28.57 %      100 %
1     2    16.66 %    33.33 %       50 %      100 %
2     3       25 %      37.5%     37.5 %      100 %

利用

>>> df.iloc[:, 1:] = df.iloc[:, 1:].div(df['total'], axis=0).mul(100).round(2).astype(str).add(' %')
>>> df 
   ID     col1     col2     col3    total
0   1  28.57 %  42.86 %  28.57 %  100.0 %
1   2  16.67 %  33.33 %   50.0 %  100.0 %
2   3   25.0 %   37.5 %   37.5 %  100.0 %

您可以使用:

import pandas as pd
df = pd.DataFrame({
    'ID': range(1, 4),
    'col1': [10, 5, 10],
    'col2': [15, 10, 15],
    'col3': [10, 15, 15],
    'total': [35, 30, 40]
})

idx = ['col1', 'col2', 'col3', 'total']

df[idx] = df[idx].apply(lambda x: x / x['total'], axis=1)
df

這給了你:

|    |   ID |     col1 |     col2 |     col3 |   total |
|---:|-----:|---------:|---------:|---------:|--------:|
|  0 |    1 | 0.285714 | 0.428571 | 0.285714 |       1 |
|  1 |    2 | 0.166667 | 0.333333 | 0.5      |       1 |
|  2 |    3 | 0.25     | 0.375    | 0.375    |       1 |

您可以使用divdivide ,對批量列執行除法並將它們分配回去,如果您不知道列的索引,您可以使用列標簽。

cols = ['col1', 'col2', 'col3', 'total']

df[cols] = df[cols].divide(df['total'], axis=0)*100

OUTPUT

   ID       col1       col2       col3  total
0   1  28.571429  42.857143  28.571429  100.0
1   2  16.666667  33.333333  50.000000  100.0
2   3  25.000000  37.500000  37.500000  100.0

如果您希望將值四舍五入並表示為帶有%符號的字符串,您可以使用round並將其轉換為字符串並添加%符號

df[cols] = (df[cols].divide(df['total'], axis=0)*100).round(2).astype(str) + ' %'

OUTPUT

   ID     col1     col2     col3    total
0   1  28.57 %  42.86 %  28.57 %  100.0 %
1   2  16.67 %  33.33 %   50.0 %  100.0 %
2   3   25.0 %   37.5 %   37.5 %  100.0 %
df = pd.DataFrame({
    'ID': range(1, 4),
    'col1': [10, 5, 10],
    'col2': [15, 10, 15],
    'col3': [10, 15, 15],
    'total': [35, 30, 40]
})

cols = ['col1', 'col2', 'col3', 'total']
for col in cols:
    df[col] = (df[col]/df['total']*100).round(2).astype(str) + ' %'

Output

    ID  col1    col2    col3    total
0   1   28.57 % 42.86 % 28.57 % 100.0 %
1   2   16.67 % 33.33 % 50.0 %  100.0 %
2   3   25.0 %  37.5 %  37.5 %  100.0 %
import pandas as pd 

df = pd.DataFrame({
    'ID': range(1, 4),
    'col1': [10, 5, 10],
    'col2': [15, 10, 15],
    'col3': [10, 15, 15],
    'total': [35, 30, 40]
})

df['col1'] = (df['col1']/df['total']).mul(100).round(2).astype(str).add('%')
df['col2'] = (df['col2']/df['total']).mul(100).round(2).astype(str).add('%')
df['col3'] = (df['col3']/df['total']).mul(100).round(2).astype(str).add('%')
df['total'] = (df['total']/df['total']).mul(100).round(2).astype(str).add('%')


print(df)

印刷

   ID    col1    col2    col3   total
0   1  28.57%  42.86%  28.57%  100.0%
1   2  16.67%  33.33%   50.0%  100.0%
2   3   25.0%   37.5%   37.5%  100.0%

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM