Pandas - 根据第一列值以百分比形式转换列
Pandas - Converting columns in percentage based on first columns value
有一个包含总数和计数的数据框:
pd.DataFrame({
'categorie':['a','b','c'],
'total':[100,1000,500],
'x':[10,100,5],
'y':[100,1000,500]
})
类别
总计
x
y
一个
100
10
100
b
1000
100
1000
c
500
5
500
我喜欢将计数的列转换为基于总计的百分比:
类别
总计
x%
y%
一个
100
10
100
b
1000
10
100
c
500
1
100
以下适用于系列:
(100 * df['x'] / df['total']).round(1)
如何将此应用于数据框中的所有列?
尝试通过 div()
、mul()
和 astype()
方法:
df[['x%','y%']]=df[['x','y']].div(df['total'],axis=0).mul(100).astype(int)
df
的输出:
categorie total x y x% y%
0 a 100 10 100 10 100
1 b 1000 100 1000 10 100
2 c 500 5 500 1 100
有一个包含总数和计数的数据框:
pd.DataFrame({
'categorie':['a','b','c'],
'total':[100,1000,500],
'x':[10,100,5],
'y':[100,1000,500]
})
类别 | 总计 | x | y |
---|---|---|---|
一个 | 100 | 10 | 100 |
b | 1000 | 100 | 1000 |
c | 500 | 5 | 500 |
我喜欢将计数的列转换为基于总计的百分比:
类别 | 总计 | x% | y% |
---|---|---|---|
一个 | 100 | 10 | 100 |
b | 1000 | 10 | 100 |
c | 500 | 1 | 100 |
以下适用于系列:
(100 * df['x'] / df['total']).round(1)
如何将此应用于数据框中的所有列?
尝试通过 div()
、mul()
和 astype()
方法:
df[['x%','y%']]=df[['x','y']].div(df['total'],axis=0).mul(100).astype(int)
df
的输出:
categorie total x y x% y%
0 a 100 10 100 10 100
1 b 1000 100 1000 10 100
2 c 500 5 500 1 100