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

创建函数来过滤和计算基于过滤器的行划分?

创建函数来过滤和计算基于过滤器的行划分?

弑天下 2022-05-19 18:42:16
我有一个如下的df:我正在使用如下简单代码:过滤df中的列,然后根据列的值计算简单的数学,因此如果列值被取消,则处理并完成;我想计算整个 df 或所有行的取消的百分比或行数。df 看起来像:   ID |    Status    |   Color   555    Cancelled     Green   434    Processed     Red      212    Cancelled     Blue   121    Cancelled     Green   242    Cancelled     Blue   352    Processed     Green   343    Processed     Blue我目前使用的代码是:df[df['Color'] == 'Green']df[(df['Status']=='Cancelled') & (df['Color']=='Green')]对于每种不同类型的颜色的含义,我首先手动过滤 df 以获得行数,然后在下面对其进行双重过滤以获得取消的行数或订单数,然后手动除以 # 但他 # 只是绿色行。如果我想创建一个函数,我可以在其中插入颜色名称和状态,并在一个简单的函数中以这种方式进行数学运算,那么最好的方法是什么?预期输出将类似于: Status      GreenCancelled    0.666667Processed    0.333333dtype: float64
查看完整描述

1 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

您可以使用 groupby 和 len():


df.groupby(by='Status').apply(lambda x: len(x)/len(df))


Status

Cancelled    0.666667

Processed    0.333333

dtype: float64

按状态和颜色分类:


cc = df.groupby(by='Color').ID.count()

df.groupby(by=['Color', 'Status']).apply(lambda x: len(x)/cc.loc[x.Color.iloc[0]])


Color  Status   

Blue   Cancelled    0.666667

       Processed    0.333333

Green  Cancelled    0.666667

       Processed    0.333333

Red    Processed    1.000000

dtype: float64


查看完整回答
反对 回复 2022-05-19
  • 1 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

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