说我有以下数据框:
>>> df=pd.DataFrame([[150,90,60],[200,190,10],[400,150,250]], columns=['Total','Group1','Group2'])
>>> df
Total Group1 Group2
0 150 90 60
1 200 190 10
2 400 150 250
>>>
如您所见,第1组和第2组总计达到总数(人口普查数据中的思维年龄类别)。我想计算每组中的百分比。
现在我按照以下方式执行此操作:
>>> df2=df.copy()
>>> for Group in ['Group1','Group2']:
... df2[Group]=df[Group]/df['Total']*100
...
>>>
>>> df2
Total Group1 Group2
0 150 60.0 40.0
1 200 95.0 5.0
2 400 37.5 62.5
>>>
但是,我确定没有for循环可以做到这一点。也许使用applymap或map?有人能告诉我更有效的计算方法吗?
答案 0 :(得分:2)
您可以按如下方式划分:
>>> df.div(df.Total.values, axis=0)
Total Group1 Group2
0 1 0.600 0.400
1 1 0.950 0.050
2 1 0.375 0.625
我不建议混合值和百分比,但如果你真的想,你可以重新分配Total
:
df2 = df.div(df.Total.values, axis=0)
df2['Total'] = df.Total
答案 1 :(得分:2)
>>> print df.drop('Total', axis=1).divide(df.Total, axis=0)
Group1 Group2
0 0.600 0.400
1 0.950 0.050