使用附加列对DataFrame进行分组和透视以计算比率

Pri*_*iya 5 python group-by counting pandas pandas-groupby

我有一个如下所示的数据框:

id       status      year 
1        yes         2014
3        no          2013
2        yes         2014
4        no          2014
Run Code Online (Sandbox Code Playgroud)

实际的数据帧非常大,有多个ID和年份.我正在尝试制作一个新的数据框,其中"是"和"否"的百分比按年份分组.

我当时正在考虑按年份对数据进行分组,然后将每年的状态放在一个列表中然后分析是和否的计数,但我想知道是否有更多的pythonic方法来做到这一点?

我想最终的数据帧看起来像这样:

year      yes_count     no_count     ratio_yes_to_toal    
2013       0             1             0%
2014       2             1             67%
Run Code Online (Sandbox Code Playgroud)

Tim*_*Tim 2

我建议按year和进行分组status、计数、旋转,然后创建比率的附加列:

df2 = df.groupby(['year', 'status']).count().pivot_table(index="year", columns=["status"]).fillna(0)
df2.columns = df2.columns.get_level_values(1)
df2['ratio'] = df2['yes'] / (df2['yes'] + df2['no'])
Run Code Online (Sandbox Code Playgroud)

输出

status   no  yes     ratio
year                      
2013    1.0  0.0  0.000000
2014    1.0  2.0  0.666667
Run Code Online (Sandbox Code Playgroud)