pandas groupby分组聚合时条件计数错误的正确实现方法是什么?
问题原因
你代码中的条件计数使用了count()方法,该方法会统计布尔序列里所有非空值的总个数,无论布尔值是True还是False都会被计入,最终得到的是分组内的总天数,和你的预期不符。
修正方案
把条件计数语句中的count()替换为sum()即可。布尔值在执行求和运算时,True会被识别为1、False会被识别为0,求和结果正好是满足条件的记录条数。
修正后完整代码
def f(x): d = {} d['Avg_Transactions'] = x['Transaction'].mean().round() d['Avg_Balance'] = x['Balance'].mean().round(2) d['Zero_Balance_days'] = (x['Balance'] < 0).sum() d['Over_Credit_days'] = (x['Balance'] > x['Max Credit']).sum() return pd.Series(d, index=['Avg_Transactions', 'Avg_Balance', 'Zero_Balance_days', 'Over_Credit_days']) month = df.groupby(['Account','Name', 'Month']).apply(f) # 若需要把分组的多层索引转为普通列,可在后面加.reset_index() # month = df.groupby(['Account','Name', 'Month']).apply(f).reset_index()
内容的提问来源于stack exchange,提问作者bran
相关产品推荐
相关产品推荐

