创建比例数据框

时间:2018-12-13 19:22:08

标签: python pandas dataframe

我有类似这样的列表清单:

[[person_a,code_1],[person_a,code_2],[person_a,code_3],[person_b,code_1],[person_b,code_1],[person_b,code_1],[person_a,code_4],[person_b,code_2]...]

我希望实现以下目标:

          code_1  code_2 code_3 code_4
person a   .2500   .2500   .2500    .2500
person b   .6667   .3333   0.0    0.0

我以前在R中使用prop.table来实现此目的,但我想知道是否有Python等效项。我可以将列表列表转换为数据框,我感兴趣的是一些可以生成每个人代码比例的函数。

1 个答案:

答案 0 :(得分:1)

使用熊猫

import pandas as pd

data = [
    ['person_a', 'code_1'],
    ['person_a', 'code_2'],
    ['person_a', 'code_3'],
    ['person_b', 'code_1'],
    ['person_b', 'code_1'],
    ['person_b', 'code_1'],
    ['person_a', 'code_4'],
    ['person_b', 'code_2']]

df = pd.DataFrame(data, columns=['person', 'code'])

df = df.assign(relative_frequency=1).groupby(['person', 'code']).count().unstack()
# >>> df
#          relative_frequency                     
# code                 code_1 code_2 code_3 code_4
# person                                          
# person_a                  1      1      1      1
# person_b                  3      1    NaN    NaN

>>> df.div(df.sum(1), axis=0)
         relative_frequency                     
code                 code_1 code_2 code_3 code_4
person                                          
person_a               0.25   0.25   0.25   0.25
person_b               0.75   0.25    NaN    NaN