我想创建一个只显示在职工作人员的名册。所有工作人员都列在一个表中,没有终止合同的在职工作人员在表中有一行。被解雇的工作人员有两行数据。雇员身份是指工资或期限。我怎样才能得到一排只工作的员工?每个工作人员都有一个独特的ID。
发布于 2022-10-06 19:48:48
您使用的是什么编程语言?
我假设你在使用Python,使用熊猫来处理数据。此外,只要有可能,共享示例数据将使其他用户能够更有效地帮助您。
,如果可能的话,请编辑你的问题,在你的问题中添加更多的上下文,以便其他人能更有效地帮助你!
我已经开发了下面的代码,试图根据从您的问题中推断出的数据来重新创建您的问题。
# == Necessary Imports ===============================================
import pandas as pd
# == Generate sample dataframe =======================================
# For our sample, employees 3, 7, and 9 will represent the terminated
# employees.
df = pd.DataFrame(
{
"memberID": [1, 2, 3, 3, 4, 5, 6, 7, 7, 8, 9, 9],
"status": [
"wages",
"wages",
"wages", # <-- Employee 3 terminated
"term", # <-- Employee 3 terminated
"wages",
"wages",
"wages",
"wages", # <-- Employee 7 terminated
"term", # <-- Employee 7 terminated
"wages",
"wages", # <-- Employee 9 terminated
"term", # <-- Employee 9 terminated
],
}
)
# == Solution ==============================================================
df.loc[
df["memberID"].isin(
df["memberID"]
.value_counts()
.to_frame("count")
.loc[lambda xdf: xdf["count"] < 2, :]
.index
),
:,
]
# Returns:
#
# memberID status
# 0 1 wages
# 1 2 wages
# 4 4 wages
# 5 5 wages
# 6 6 wages
# 9 8 wages备注
基本上,我的方法是使用pandas.Series.value_counts来查找每个"memberID"在dataframe上出现的次数。然后,我将一个.loc调用链接起来,以过滤在dataframe上出现少于2次的员工,并在原始df上筛选那些"memberID"。
总之,该解决方案使用了熊猫的三种方法:
pandas.Series.value_counts:统计熊猫系列的每个值得到的次数,将熊猫系列转换为DataFrame (用于链接多个操作,together).pandas.DataFrame.loc:用于过滤数据中只出现一次的员工)。然后再使用第二次过滤原始的df,只考虑那些没有被解雇的员工。https://stackoverflow.com/questions/73979043
复制相似问题