我有一个员工工资数据的数据框架(示例如下),其中“日期”是指员工工资生效的时间:
Employee Date Salary
PersonA 1/1/2016 $50000
PersonB 3/5/2014 $65000
PersonB 3/1/2015 $75000
PersonB 3/1/2016 $100000
PersonC 5/15/2010 $75000
PersonC 6/3/2011 $100000
PersonC 3/10/2012 $110000
PersonC 9/5/2012 $130000
PersonC 3/1/2013 $150000
PersonC 3/1/2014 $200000
在这个例子中,PersonA今年起薪50000美元,PersonC已经在公司工作了一段时间,自从2010年5月15日开始工作以来,已经收到了几次加薪。在
我需要将Date
列转换为Months from Start
,其中Months from Start
将以m
个月为增量(由我指定)。例如,对于PersonB,假设m=12
,结果将是:
这意味着在第0个月(就业开始)时,PersonB的工资是65000美元;12个月后他的工资是65000美元,24个月后他的工资是75000美元。在未来的一个月内,将不会有超过36个月的就业增长(请注意,在未来的一个月内不会出现)。在
再次注意,我希望能够将m
调整为任何月份的增量。如果我想要6个月的增量(m=6
),结果是:
Employee Months From Start Salary
PersonB 0 $65000
PersonB 6 $65000
PersonB 12 $65000
PersonB 18 $75000
PersonB 24 $100000
PersonB 30 $100000
最后一步,我还想在转换后的数据帧中包含该员工截至今日的工资。再次使用PersonB,并假设m=6
,这意味着结果将是:
Employee Months From Start Salary
PersonB 0 $65000
PersonB 6 $65000
PersonB 12 $65000
PersonB 18 $75000
PersonB 24 $100000
PersonB 30 $100000
PersonB 32.92 $100000 <--added (today is 32.92 months from start)
问题:是否有一种编程方式(我假设使用至少一种:groupby
、resample
或{
注意:你可以假设所有员工都在工作(没有离开公司)。在
好吧,在回答的第一部分,我会这样做。。。在
m
可以是任何你想要的。我在计算min
日期之间的天数,然后除以一个月内的大致天数,然后进行一点整数除法,将窗口大小“四舍五入”。在这会给你这样的东西。。。在
^{pr2}$第二部分有点棘手。我会创建一个新的df和concat到第一个。。。在
让你。。。在
您可以结合groupby和resample来执行此操作。要使用重采样,需要将日期作为索引。在
然后:
^{pr2}$在这个例子中,我用了6个月的周期。请注意,它将在每个月的最后一天,我希望这不会是一个问题。 然后你将得到:
现在可以创建“months since started”列(cumcount函数检查每行在其组中出现的顺序)。记住用每个周期的月数乘以它(在本例中为6):
希望有帮助!在
您可以使用
groupby
和merge
的功能在这里,您可以将
6
替换为一个名为m
的变量,并为其分配任意值相关问题 更多 >
编程相关推荐