计算首次发生和个别发生之间的差异(P)

2024-10-04 09:26:12 发布

您现在位置:Python中文网/ 问答频道 /正文

让我们看看一个简单的HR数据框,例如:

^{tb1}$

问题:任何数据集需要多少时间(以年为单位)才能获得工资>;=在同一部门的第一个人打了那个号码之后,是100?(请参见新列“hit100after”)

实际上,我正在为实现而苦苦挣扎。我的步骤是按部门分组,找到第一个出现的薪资>;=100,并用新的布尔类型或第二个数据框标记该年份。然后我将计算>;=100个人和其部门的第一次事件

知道如何为大型数据帧编码吗


Tags: 数据标记gt类型时间事件hr步骤
2条回答

您可以尝试:

new_col = (df.query("Salary >= 100")
             .groupby("Department")
             .apply(lambda x: x.Year - x.iloc[0].Year)
             .reset_index(level=0, drop=True)
             .T)
df["hit100after"] = new_col
df["hit100after"] = df["hit100after"].fillna(0).astype(int)

首先,我们查看工资大于100(query)的条目,然后按部门对它们进行分组(groupby),应用函数获取与部门中第一个条目(applyiloc[0])的年度差异,去掉第0级的部门名称(reset_index,其中dropTrue),并进行换位(T)以确保其垂直,以便于与原始df对齐

最后,我们将这个新列分配给df,但由于我们只选择了那些带有Salary >= 100的列,所以分配时有NaN;因此fillna(0)。由于NaN从技术上讲是一个浮点数,所以它使序列浮动,因此我们在最后转换为int

要获得:

    Name  Year Department  Salary  hit100after
0   John  2018        R&D      80            0
1  Marie  2018      Legal      90            0
2   Jill  2018      Legal     100            0
3   John  2019        R&D      85            0
4  Marie  2019      Legal      95            0
5   Jill  2019      Legal     105            1
6   John  2020        R&D      90            0
7  Marie  2020      Legal     100            2
8   Jill  2020      Legal     110            2

您可以^{}Department中找到Year.min(),其中Salary >= 100

first100 = df.groupby('Department').apply(
    lambda g: g[g.Salary >= 100].Year.min())

# Department
# Legal    2018.0
# R&D         NaN
# dtype: float64

然后^{}这些first100年乘以Department并从Year中减去。结果显示在Result中以供比较:

df['Result'] = df.Year - df.Department.map(first100)
df.loc[df.Salary < 100, 'Result'] = 0

#     Name  Year Department  Salary  Hit100after  Result
# 0   John  2018        R&D      80            0     0.0
# 1  Marie  2018      Legal      90            0     0.0
# 2   Jill  2018      Legal     100            0     0.0
# 3   John  2019        R&D      85            0     0.0
# 4  Marie  2019      Legal      95            0     0.0
# 5   Jill  2019      Legal     105            1     1.0
# 6   John  2020        R&D      90            0     0.0
# 7  Marie  2020      Legal     100            2     2.0
# 8   Jill  2020      Legal     110            2     2.0

当前答案的计时

^{tb1}$

相关问题 更多 >