2015-11-03 4 views
1

Скажет, у меня есть следующий dataframe:Лучший способ рассчитать Column Процент Всего панда

>>> 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 суммы до Total (думают, возрастные категории в данной переписи населения). Я хочу рассчитать процент в каждой группе.

Прямо сейчас я делаю это следующим образом:

>>> 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 
>>> 

Однако, я уверен, что есть способ сделать это без для цикла. Возможно, с помощью applymap или map? Может ли кто-нибудь показать мне более эффективный способ сделать этот расчет?

ответ

2
>>> print df.drop('Total', axis=1).divide(df.Total, axis=0) 
    Group1 Group2 
0 0.600 0.400 
1 0.950 0.050 
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 
Смежные вопросы