猿问

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

我有一个如下的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      Green

Cancelled    0.666667

Processed    0.333333

dtype: float64


弑天下
浏览 81回答 1
1回答

Smart猫小萌

您可以使用 groupby 和 len():df.groupby(by='Status').apply(lambda x: len(x)/len(df))StatusCancelled    0.666667Processed    0.333333dtype: 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.333333Green  Cancelled    0.666667       Processed    0.333333Red    Processed    1.000000dtype: float64
随时随地看视频慕课网APP

相关分类

Python
我要回答