繁体   English   中英

pandas 数据框中 2 列的值计数

[英]Value counts of 2 columns in a pandas dataframe

我有以下格式的表格。 我想做两列(年份和操作)的值计数并获得它们的百分比。 例如,在“2014”年,值“是”出现了 3 次中的 2 次,因此 2/3 = 0.66。 我尝试使用 value_counts 但它没有产生以下结果。 任何线索将不胜感激。

df[['year', 'operation']].apply(pd.Series.value_counts)

year operation
2014    yes
2014    yes
2014    no
2015    
2015    yes
2015    yes

Result:

2014   yes     0.66
2014   no      0.33
2015           0.33
2015   yes     0.66

让我们尝试使用SeriesGroupBy.value_counts并设置normalize=True以获取百分比值:

out = df.groupby('year')['operation'].value_counts(normalize=True)

out

year  operation
2014  yes          0.666667
      no           0.333333
2015  yes          0.666667
                   0.333333
Name: operation, dtype: float64

还可以将sort=False设置为不以每级别 0 的最高值进行排序:

out = df.groupby('year')['operation'].value_counts(normalize=True, sort=False)

out

year  operation
2014  no           0.333333
      yes          0.666667
2015               0.333333
      yes          0.666667
Name: operation, dtype: float64

Series.reset_index可以与name= set 一起使用来创建 DataFrame 而不是 Series 并为未命名的值列命名:

new_df = (
    df.groupby('year')['operation'].value_counts(normalize=True)
        .reset_index(name='freq')
)
   year operation      freq
0  2014       yes  0.666667
1  2014        no  0.333333
2  2015       yes  0.666667
3  2015            0.333333

使用的数据帧:

df = pd.DataFrame({'year': [2014, 2014, 2014, 2015, 2015, 2015],
                   'operation': ['yes', 'yes', 'no', '', 'yes', 'yes']})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM