2024-10-04 09:26:12 发布
网友
让我们看看一个简单的HR数据框,例如:
问题:任何数据集需要多少时间(以年为单位)才能获得工资>;=在同一部门的第一个人打了那个号码之后,是100?(请参见新列“hit100after”)
实际上,我正在为实现而苦苦挣扎。我的步骤是按部门分组,找到第一个出现的薪资>;=100,并用新的布尔类型或第二个数据框标记该年份。然后我将计算>;=100个人和其部门的第一次事件
知道如何为大型数据帧编码吗
您可以尝试:
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),应用函数获取与部门中第一个条目(apply和iloc[0])的年度差异,去掉第0级的部门名称(reset_index,其中drop为True),并进行换位(T)以确保其垂直,以便于与原始df对齐
query
groupby
apply
iloc[0]
reset_index
drop
True
T
df
最后,我们将这个新列分配给df,但由于我们只选择了那些带有Salary >= 100的列,所以分配时有NaN;因此fillna(0)。由于NaN从技术上讲是一个浮点数,所以它使序列浮动,因此我们在最后转换为int
Salary >= 100
NaN
fillna(0)
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:
Department
Year.min()
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中以供比较:
first100
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
您可以尝试:
首先,我们查看工资大于100(
query
)的条目,然后按部门对它们进行分组(groupby
),应用函数获取与部门中第一个条目(apply
和iloc[0]
)的年度差异,去掉第0级的部门名称(reset_index
,其中drop
为True
),并进行换位(T
)以确保其垂直,以便于与原始df
对齐最后,我们将这个新列分配给
df
,但由于我们只选择了那些带有Salary >= 100
的列,所以分配时有NaN
;因此fillna(0)
。由于NaN
从技术上讲是一个浮点数,所以它使序列浮动,因此我们在最后转换为int
要获得:
您可以^{} 在
Department
中找到Year.min()
,其中Salary >= 100
:然后^{} 这些
first100
年乘以Department
并从Year
中减去。结果显示在Result
中以供比较:当前答案的计时
相关问题 更多 >
编程相关推荐