Python: 如何使用 groupby().size() 的结果
Python: how to use result of groupby().size()
我有一个 Kickstarter 数据集,想在图中显示成功率。所以有一个列“成功”,它是“是”或“否”以及不同的国家。
Succesfull=df[['country', 'succesfull']].groupby(['country', 'succesfull']).size()
我用这条线创建了一个新的数据框,它显示了一个国家有多少项目是成功的,有多少没有。看起来像这样:
我现在如何计算每个国家/地区的成功率(“是”的数量/总数量)?我怎样才能访问没有名称的最后一列(只有一个 0)。
这可能不是最好的方法,但我就是这样分解问题的。
1) 制作一个可重现的小例子来测试不同的情况[=33=]
df = pd.DataFrame({'country': ['AU', 'AU', 'CA', 'CA', 'GB', 'GB'], 'successfull': ['Yes', 'No', 'No', 'No', 'Yes', 'Yes']})
df
Out[3]:
country successfull
0 AU Yes
1 AU No
2 CA No
3 CA No
4 GB Yes
5 GB Yes
2) 计算成功的项目
只匹配 'Yes' 的值并计算它们
success = df[df['successfull'] == 'Yes'].groupby('country').size()
success
Out[5]:
country
AU 1
GB 2
dtype: int64
3) 计算项目总数
与发布的问题类似。
total = df.groupby('country').size()
total
Out[7]:
country
AU 2
CA 2
GB 2
dtype: int64
4) 取成功项目占项目总数的比例
一旦这两个系列存在,就可以计算比率。如果一个国家没有 'Yes',它将变成 NaN。把这些换成0,因为这里成功率为0
Successfull = (success/total).replace(np.nan, 0)
Out[10]:
country
AU 0.5
CA 0.0
GB 1.0
dtype: float64
5) 访问数据
上面的成功对象是一个Pandas.Series
。下面是一些访问示例。比如要知道一个国家有多成功,就用国家代码作为索引:
Successfull['AU']
Out[11]: 0.5
要获得一组成功率,可以访问 .values
属性。
Successfull.values
Out[12]: array([0.5, 0. , 1. ])
绘制结果
Successfull.plot()
我有一个 Kickstarter 数据集,想在图中显示成功率。所以有一个列“成功”,它是“是”或“否”以及不同的国家。
Succesfull=df[['country', 'succesfull']].groupby(['country', 'succesfull']).size()
我用这条线创建了一个新的数据框,它显示了一个国家有多少项目是成功的,有多少没有。看起来像这样:
我现在如何计算每个国家/地区的成功率(“是”的数量/总数量)?我怎样才能访问没有名称的最后一列(只有一个 0)。
这可能不是最好的方法,但我就是这样分解问题的。
1) 制作一个可重现的小例子来测试不同的情况[=33=]
df = pd.DataFrame({'country': ['AU', 'AU', 'CA', 'CA', 'GB', 'GB'], 'successfull': ['Yes', 'No', 'No', 'No', 'Yes', 'Yes']})
df
Out[3]:
country successfull
0 AU Yes
1 AU No
2 CA No
3 CA No
4 GB Yes
5 GB Yes
2) 计算成功的项目
df = pd.DataFrame({'country': ['AU', 'AU', 'CA', 'CA', 'GB', 'GB'], 'successfull': ['Yes', 'No', 'No', 'No', 'Yes', 'Yes']})
df
Out[3]:
country successfull
0 AU Yes
1 AU No
2 CA No
3 CA No
4 GB Yes
5 GB Yes
只匹配 'Yes' 的值并计算它们
success = df[df['successfull'] == 'Yes'].groupby('country').size()
success
Out[5]:
country
AU 1
GB 2
dtype: int64
3) 计算项目总数
与发布的问题类似。
total = df.groupby('country').size()
total
Out[7]:
country
AU 2
CA 2
GB 2
dtype: int64
4) 取成功项目占项目总数的比例
一旦这两个系列存在,就可以计算比率。如果一个国家没有 'Yes',它将变成 NaN。把这些换成0,因为这里成功率为0
Successfull = (success/total).replace(np.nan, 0)
Out[10]:
country
AU 0.5
CA 0.0
GB 1.0
dtype: float64
5) 访问数据
上面的成功对象是一个Pandas.Series
。下面是一些访问示例。比如要知道一个国家有多成功,就用国家代码作为索引:
Successfull['AU']
Out[11]: 0.5
要获得一组成功率,可以访问 .values
属性。
Successfull.values
Out[12]: array([0.5, 0. , 1. ])
绘制结果
Successfull.plot()