代码之家  ›  专栏  ›  技术社区  ›  lpt

多列熊猫数据帧中的快捷计数方法

  •  1
  • lpt  · 技术社区  · 6 年前

    这是我的数据框

        year2000_bin    year2001_bin    year2002_bin    Firm
    0   binZ            binZ            binZ            0
    1   binZ            binZ            binZ            1
    2   binZ            binZ            binZ            2
    3   binZ            binZ            binZ            3
    4   binZ            binZ            binZ            4
    5   binZ            binZ            binZ            5
    6   binW            binV            binV            6
    7   binZ            binZ            binZ            7
    8   binZ            binZ            binZ            8
    9   binZ            binZ            binZ            9
    

    我试图找到属于每个垃圾桶的公司总数(如垃圾桶、垃圾桶等)

    下面的语法给了我两年时间

    dict1={k:list(v) for k, v in rebinnedDF.groupby('year2000_bin')['Firm'] }       
    dict2={k:list(v) for k, v in rebinnedDF.groupby('year2001_bin')['Firm'] }
    
    year1= [(k, len(v1)) for k, v1 in dict1.items()]
    year2= [(k, len(v2)) for k, v2 in dict2.items()] 
    for i in year1:
        #print(i[0])
        for j in year2:
            if i[0]==j[0]:
                print(j[0], i[1], j[1])
    

    我能得到结果

    (binZ, 9, 9)
    (binW, 1, 0)
    (binV, 0, 1)
    

    我的预期结果是:

    (binZ, 9, 9, 9)
    (binW, 1, 0, 0)
    (binV, 0, 1, 1)
    

    也就是说,我有列标题Year2000_Bin,Year2001_Bin,Year2002_Bin到Year2018_Bin,总共19年。如何为所选行值计算多个列。从熊猫大师那里寻找一种有效的方法。

    1 回复  |  直到 6 年前
        1
  •  0
  •   BENY    6 年前

    IIUC

    df.melt('Firm').groupby(['value','variable']).size().unstack(fill_value=0)
    Out[51]: 
    variable  year2000_bin  year2001_bin  year2002_bin
    value                                             
    binV                 0             1             1
    binW                 1             0             0
    binZ                 9             9             9