pandas如何使用条件在groupby中创建多个列?

2024-09-28 05:24:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要对一个数据帧进行分组,但我需要创建两个列,一个是简单计数,另一个是带条件的计数,如示例所示:

enter image description here

qtd_ok列只计算那些有“OK”的

enter image description here

我试过了,但是我不知道如何在同一个groupby中添加总数:

df.groupby(['column1', 'column2', 'column3']).apply(lambda x : x['status'].sum() == 'OK')

Tags: 数据lambda示例dfok条件计数apply
3条回答

只是一个想法,用groupby和lambda一起计数,可以进一步增强。。

>>> df
  colum1    colum2    colum3 status
0  unit1  section1  content1     OK
1  unit1  section1  content1     OK
2  unit1  section1  content1  error
3  unit1  section1  content2     OK
4  unit1  section2  content1     OK
5  unit1  section2  content1     OK
6  unit1  section2  content2  error
7  unit1  section2  content2  error
8  unit1  section2  content2     OK

将groupby与lambda一起使用。。

^{pr2}$

也可以将case=False用于ok的ignorecase。

^{}

您可以将pd.crosstabmargins=True一起使用:

# data from @jezrael

list_of_lists = df.iloc[:, :-1].values.T.tolist()
condition = df['status'].eq('a')

res = pd.crosstab(list_of_lists, condition, margins=True)\
        .drop('All', level=0).reset_index()

print(res)

status column1 column2 column3  False  True  All
0            a       a       a      1     2    3
1            a       a       b      0     1    1
2            a       b       a      0     2    2
3            a       b       b      2     1    3

只为

df = (df.assign(A=(df['status']== 'OK'))
        .groupby(['column1', 'column2', 'column3'])['A']
        .agg([('qtd_ok','sum'),('qtd','size')])
        .astype(int)
        .reset_index())

样本

^{pr2}$

相关问题 更多 >

    热门问题