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

根据列值筛选值

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

    我有以下数据框

    import pandas as pd
    newd = {'year': [2001, 2002, 2005, 2002, 2004, 2001, 2001, 2002, 2003, 2003, 2002, 2002, 2003, 2004, 2005, 2003, 2004, 2005, 2004, 2004 ],
     'indviduals': [12, 23, 24, 28,30, 15, 17, 18, 18, 19, 12, 15, 12, 12, 12, 15, 15, 15, 12, 12],
     'employers': ['a', 'b', 'c', 'd', 'e', 'a', 'a', 'b', 'b', 'c', 'b', 'a', 'c', 'd', 'e', 'a', 'a', 'a', 'a', 'b'] }
    
    
    newdf=newdf=pd.DataFrame(newd)
    

    我的预期结果(仅举一个例子):

    2001, a: [12, 15, 17] count:3  employerchanged: []
    2002, b: [12, 23, 28] count:3  employerchanged: [12] 
    2002, a: [15]         count:1
    

    在sql中完成此操作很容易。但是,如果2001年到2002年间,12个人更换了雇主,sql不会告诉我答案。

    这就是我在python中所做的尝试:

    dic={}
    
    listofUniqueYears= [i for i in newdf.year.unique()]
    

    #给我一张独特年份的清单

    dic={}
    
    for i in listofUniqueYears:
       dic[i]=defaultdict(dict)
    
        print(dic)
    

    我的问题是如何根据我提供的条件筛选行值,在这种情况下,我希望每个雇主每年都有雇员数量、计数和更改的雇员。

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

    您可以按申请一个组,以获得每个员工每年的唯一雇主数。

    df = newdf.groupby(['year','indviduals']).agg({'employers':'nunique'}).reset_index()
    df[df.year == 2004]
    

    如果需要计数之和,还可以应用进一步的聚合,具体取决于所需的内容。