【发布时间】:2019-01-22 19:49:14
【问题描述】:
我想在 pandas 中做一个groupby,作为结果获得一个数据框,该数据框具有用于groupby 的列作为列,每个组的元素数量以及其中每个组中的元素数量,满足/不满足基于另一列值的条件的元素数。
例如是这样的输入:
type success
A True
B False
A False
C True
我想要类似的东西:
type total numOfSuccess numOfFailure
A 2 1 1
B 1 0 1
C 1 1 0
在 pyspark 中我是这样做的
import pyspark.sql.functions as F
df = df.groupBy("type").agg(\
F.count('*').alias('total'), \
F.sum(F.when(F.col('success')=="true", 1).otherwise(0)).alias('numOfSuccess'),
F.sum(F.when(F.col('success')!="true", 1).otherwise(0)).alias('numOfFails'))
在 pandas 中,我只能得到 total 和 numOfSuccess 为:
df_new = df.groupby(['type'], as_index=False)['success'].agg({'total':'count', 'numOfSuccess':'sum'})
或者只有总数为:
df = df.groupby(['type']).size().reset_index(name='NumOfReqs')
但我无法获得第三列numOfFailures,而且如果有替代方法而不是对布尔值求和,那会更好,因为在我看来,in 可以扩展到其他情况也更容易。
我该怎么做?
【问题讨论】:
标签: python pandas group-by pandas-groupby