提问人:y R 提问时间:11/1/2023 最后编辑:petezurichy R 更新时间:11/1/2023 访问量:59
根据条件从其他列中的最小日期插补日期值
Impute date value from minimum date in other column based on a condition
问:
我有一个数据集,比如,
划分 | 员工 | 加入日期 | Obs 日期 |
---|---|---|---|
DV1的 | EMP1 | 01/01/1972 | 10/10/1996 |
Fvp的 | EMP1 | 25/10/1989 | 24/05/1999 |
Dv1 | EMP2的 | 零 | 02/02/1995 |
DV1的 | EMP2的 | 零 | 05/02/1995 |
Fvp的 | EMP2的 | 10/10/2000 | 20/05/2001 |
我想获取每个员工的最小 Obs 日期,其加入日期为 null。并替换它。 请注意,员工代码在各个部门之间是重复的。但是,部门和员工综合代表同一员工。
输出需要是,
划分 | 员工 | 加入日期 | Obs 日期 |
---|---|---|---|
DV1的 | EMP1 | 01/01/1972 | 10/10/1996 |
Fvp的 | EMP1 | 25/10/1989 | 24/05/1999 |
Dv1 | EMP2的 | 02/02/1995 | 02/02/1995 |
DV1的 | EMP2的 | 02/02/1995 | 05/02/1995 |
Fvp的 | EMP2的 | 10/10/2000 | 20/05/2001 |
答:
3赞
Umagon
11/1/2023
#1
我假设表中的“Dv1”和“DV1”是相同的值(否则,这个问题对我来说没有意义)。如果是这种情况,则必须在应用以下解决方案之前进行一些清洁。即:.如果需要,可以在之后恢复以前的值。df['Division'] = df['Division'].str.lower()
您可以使用:
df['Date of Join'] = df['Date of Join'].fillna(df.groupby(['Division','Employee'])['Obs Date'].transform("min"))
输出:
划分 | 员工 | 加入日期 | Obs 日期 | |
---|---|---|---|---|
0 | DV1的 | EMP1 | 01/01/1972 | 10/10/1996 |
1 | Fvp的 | EMP1 | 25/10/1989 | 24/05/1999 |
2 | DV1的 | EMP2的 | 02/02/1995 | 02/02/1995 |
3 | DV1的 | EMP2的 | 02/02/1995 | 05/02/1995 |
4 | Fvp的 | EMP2的 | 10/10/2000 | 20/05/2001 |
这样做的目的是:
df['Date of Join']
:分配列的所有值。df['Date of Join'].fillna()
:获取列的值,但替换值。Null
df.groupby(['Division','Employee'])['Obs Date']
:按键分组,让焦点在每组的列中。Obs Date
transform("min")
:从我找到此解决方案的提示(https://stackoverflow.com/a/53339320/1311269):
+ 语法将分组均值映射到原始数据帧的索引。
groupby
transform
希望对你有所帮助。
评论