我有一个如下的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
添加回答
举报
0/150
提交
取消