我有这样一个数据帧:

df_test = pd.DataFrame({'ID1':['A','A','A','A','A','A','B','B','B','B'],
                       'ID2':['a','a','a','aa','aaa','aaa','b','b','bb','bb'],
                       'ID3':['c1','c2','c3','c4','c5','c6','c7','c8','c9','c10'],
                       'condition':['','!','','!','','','!','','','!']})

df_test

我要他们按ID1分组.对于每个ID2组,结果数据帧需要如下(count_条件表示"!"的数量):

df_test_result = pd.DataFrame({'ID1':['A','A','A','B','B'],
                       'ID2':['a','aa','aaa','b','bb'],
                        'Count_ID2':[3,1,2,2,2],
                        'Count_ID3':[3,1,2,2,2],
                        'Count_condition': [1,1,0,1,1]})

df_test_result

我曾try 使用groupby和agg来获得这个结果,但我无法获得"!"的数字每一组.这是我的命令

df_test_result = df_test.groupby(['ID1','ID2']).agg({'ID2':'count','ID3':'nunique','condition':'count'})

如果有这样一个错误的命令:

df_test = df_test.groupby(['ID1','ID2']).agg({'ID2':'count','ID3':'nunique','condition' == '!':'count'})

推荐答案

您可以使用命名的groupby:

df_test.groupby(
    ['ID1','ID2']).agg(
    Count_ID2=('ID2', 'count'),
    Count_ID3=('ID3', 'count'),
    Count_condition=("condition", lambda x: str(x).count('!')))

输出:

         Count_ID2  Count_ID3  Count_condition
ID1 ID2                                       
A   a            3          3                1
    aa           1          1                1
    aaa          2          2                0
B   b            2          2                1
    bb           2          2                1

在上面,我们用aggfunc="count"来计算"ID2"和"ID3"列的发生次数,并创建一个小的自定义函数来计算"condition"列!的发生次数.我们对每个组执行上述操作,并为聚合结果返回命名列

Python相关问答推荐

Django:如何将一个模型的唯一实例创建为另一个模型中的字段

如何从维基百科的摘要部分/链接列表中抓取链接?

从包含基本数据描述的文本字段中识别和检索特定字符序列

使用decorator 重复超载

获取Azure Pipelines以从pyproject.toml(而不是relevments_dev.文本)安装测试环境

单击Python中的复选框后抓取数据

"如果发生特定错误,返回值

Python主进程和分支进程如何共享gc信息?

在上下文管理器中更改异常类型

使用scipy. optimate.least_squares()用可变数量的参数匹配两条曲线

从收件箱中的列中删除html格式

Vectorize多个头寸的止盈/止盈回溯测试pythonpandas

图像 pyramid .难以创建所需的合成图像

为什么以这种方式调用pd.ExcelWriter会创建无效的文件格式或扩展名?

如何创建一个缓冲区周围的一行与manim?

ThreadPoolExecutor和单个线程的超时

Python+线程\TrocessPoolExecutor

如何使Matplotlib标题以图形为中心,而图例框则以图形为中心

为什么Django管理页面和我的页面的其他CSS文件和图片都找不到?'

如何在Python中使用Pandas将R s Tukey s HSD表转换为相关矩阵''