你好呀,汪同学! 2022-01-18 18:36 采纳率: 82.1%
浏览 107
已结题

在dataframe中,如何按多个列分组,对特定列按特定条件进行统计,并添加新的count列?

给定数据帧df1如下:

Col1       Col2            Col3    Col4   
-------------------------------------——————
A       2021/1/12         AA         1      
A       2021/1/12         AA        1   
D       2021/1/13         AA         1     
A       2021/1/12         FF         0      
B       2021/1/12         FF        0      
C       2021/1/12        AA         4       
C       2021/1/12        FF        1       
C       2021/1/12        FF        0             
D       2021/1/12        AA         0   

我想按Col1、Col2进行分组,然后
添加新列计数:其中Col1、Col2条件下Col3为AA的个数,为为FF的个数
输出需求:

Col1     Col2     AA模式计数    FF模式计数
----------------------------------------
A    2021/1/12        2             1               
B    2021/1/12       0             1      
C    2021/1/12       1             2        
D    2021/1/13       1             0      
D    2021/1/12       0             1

  • 写回答

4条回答 默认 最新

  • 陈年椰子 2022-01-19 11:03
    关注

    看了你贴的数据了, 的确是数值型 , 改一下字典构造

    img

    import pandas as pd
    
    # 初始化数据
    data_str = '''Col1,Col2,Col3,Col4
    A,2021/1/12,1,1
    A,2021/1/12,1,1
    D,2021/1/13,0,1
    A,2021/1/12,0,0
    B,2021/1/12,2,0
    C,2021/1/12,3,4
    C,2021/1/12,1,1
    C,2021/1/12,1,0
    D,2021/1/12,0,0'''
    
    lst = [n.split(",") for n in data_str.split()]
    for i in range(1,len(lst)):
        lst[i][2] = int(lst[i][2])
    for l in lst:
        print(l)
    df1 = pd.DataFrame(lst[1:])
    df1.columns = lst[0]
    df2 = df1.groupby(['Col1', 'Col2', 'Col3']).count()
    
    # 处理过程
    lst_dict = {}
    for d in df2.iterrows():
        temp = list(d[0])
        temp_key = str(temp[:2])
        if temp_key in lst_dict:
            temp_item = lst_dict[temp_key]
            temp_item[temp[2]] = d[1][0]
        else:
            # 如果待统计数据是数值型,这里的字典的key 要改成字符型
            lst_dict[temp_key] = {str(temp[2]): d[1][0]}
    # print(lst_dict)
    lst_2 = []
    for d in lst_dict:
        items = eval(d)
        data = lst_dict[d]
        # print(data)
        items.append(data['0'] if '0' in data else 0 )
        items.append(data['1'] if '1' in data else 0)
        items.append(data['2'] if '2' in data else 0)
        items.append(data['3'] if '3' in data else 0)
        lst_2.append(items)
    # print(lst_2)
    df3 = pd.DataFrame(lst_2)
    df3.columns =  ['Col1','Col2','0模式计数',' 1模式计数','2模式计数','3模式计数']
    print(df3)
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 1月27日
  • 已采纳回答 1月19日
  • 修改了问题 1月18日
  • 修改了问题 1月18日
  • 展开全部

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置