【发布时间】:2015-08-03 21:19:16
【问题描述】:
是否有简单的代码在 pandas 中执行此操作?或者我应该试试 SQL(我对 SQL 不是很熟悉)。这是我目前所拥有的(假的例子,真实的有大约 20,000 个人)
employee_df =
EmpID Name Title ManagerID
abc123 John Head pqr456
pqr456 Jake VP bs92999
zyx987 Jill Lead abc123
bs92999 Bob SVP NaN
复制数据框: manager_df = employee_df
roster = pd.merge(manager_df, employee_df, how='outer', left_on ='ManagerID', right_on = 'EmpID')
我的输出很混乱,虽然看起来是正确的(它告诉我经理是谁,而没有通过引用自己的单独表格)。
EmpID_x Name_x Title_x ManagerID_x EmpID_y Name_y Title_y ManagerID_y
abc123 John Head pqr456 pqr456 Jake VP bs92999
pqr456 Jake VP bs92999 bs92999 Bob SVP NaN
zyx987 Jill Lead abc123 abc123 John Head pqr456
bs92999 Bob SVP NaN NaN NaN NaN NaN
NaN NaN NaN NaN zyx987 Jill Lead abc123
最常见的期望输出是:
EmpID | Name | Title | Manager_Name
但有时我也需要另一个级别(老板的老板),最大潜力约为 5 层,这看起来很疯狂,但有很多等级 - 并不是一直都需要这么高的层,但我如果需要,希望能够将此数据提升到更高的级别:
EmpID | Name | Title | Manager_Name_1 | Manager_Name_2
第三个数据框是reporting_df:
EmpID | ManagerID | StartDate | EndDate
有时甚至会在月中发生管理变化,结果应该反映在当日“拥有”该员工的经理身上。
file = 任何具有 EmpID 的文件或报告,我可能想在其中找出经理(或其经理)在该日期的身份,该日期也包含在文件中。这是解决这个问题的正确方法吗?
for i in range(len(file)):
file.ix[i,'Manager'] = reporting_df[(reporting_df.StartDate.shift(-1) > file.StartDate[i]) &(reporting_df.StartDate <= file.Date[i])]
【问题讨论】:
标签: python sql database sqlite pandas