为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用python pandas按列分组并计算条件值?

如何使用python pandas按列分组并计算条件值?

白衣非少年 2021-05-30 10:57:09
输入:df=pd.DataFrame({    'BusId':['abc1','abc2','abc3','abc1','abc2','abc4'],    "Fair":[5,6,7,10,5,4]})需要按 BusId 分组并需要以下输出输出:BusId   Count of Fair>=5    Count of Fair>=10abc1    2                         1abc2    1                         0abc3    1                         0abc4    0                         0谢谢您的帮助。
查看完整描述

3 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

您可以使用pd.cut来避免对范围进行硬编码。只需剪切数据,然后应用即可cumsum:


binned_data = pd.cut(df.Fair, 

                     bins=[0, 5, 10, np.inf], 

                     labels=['>=0', '>=5', '>=10'], 

                     right=False)

df = (pd.get_dummies(binned_data)

        .sort_index(axis=1, ascending=False)

        .cumsum(1)

        .groupby(df.BusId, sort=False)

        .sum()

        .iloc[:, 1::-1]))


df

       >=5  >=10

BusId           

abc1     2     1

abc2     2     0

abc3     1     0

abc4     0     0


查看完整回答
反对 回复 2021-06-01
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

为避免聚合,您也可以apply改用。实质与user3483203的答案相同:


df.groupby('BusId').apply(lambda x: pd.Series(

               dict(five=(x.Fair >=  5).sum(),

                     ten=(x.Fair >= 10).sum())))

# BusId              five              ten     

# abc1                  2                1

# abc2                  2                0

# abc3                  1                0

# abc4                  0                0


查看完整回答
反对 回复 2021-06-01
  • 3 回答
  • 0 关注
  • 258 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信