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)
我建议按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)