根据其他列值过滤值

时间:2018-10-10 19:49:06

标签: python-3.x pandas list dictionary

我有以下数据框

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中完成此操作很容易。但是SQL不会告诉我个人'12'是否在2001年至2002年之间更换了雇主。

这是我到目前为止在python中尝试过的内容:

dic={}

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

#给了我独特的年份列表

dic={}

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

    print(dic)

我的问题是我如何根据提供的条件过滤行值,在这种情况下,我希望每个员工每年要有雇员人数,人数和变更的雇员。

1 个答案:

答案 0 :(得分:0)

您可以应用分组依据来获取每位员工每年的唯一雇主数。

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

如果您需要根据所需的计数总和,还可以应用进一步的汇总。