[英]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 |
您可以使用div
或divide
,對批量列執行除法並將它們分配回去,如果您不知道列的索引,您可以使用列標簽。
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.