python—操纵两个 Dataframe 以获得输出

b91juud3  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(174)

我已经在这段代码上工作了很长一段时间,但无法获得输出。我有两个 Dataframe ,如下所示:

df1 = pd.DataFrame([['A', 3,'Sales', 'N', 'Y', 'Y'],['B',5 ,'Sales', 'N', 'N', 'Y'],['C', 4,'FIN', 'Y', 'N', 'N'],['D', 2,'FIN', 'N', 'Y', 'Y']],
                          columns=['EMP_NAME', 'HOURS', 'DEPT', 'COM', 'OT', 'BIN'])
df2 = pd.DataFrame([['COM','SALES', 0.05, 5],['OT','SALES', 0.02, 2],['BIN','SALES', 0.02, 3],['COM','FIN', 0.06, 0], ['OT','FIN', 0.04, 6], ['BIN','FIN', 0.07, 8]],
                          columns=['CATEGORY','DEPT', 'RATE', 'EXTRA'])

任务是使用df2中的数据计算df1中“com”、“ot”、“bn”列中有“y”的所有员工的总金额。例如,对于员工a,加班费金额为3(小时)*0.04(费率)+2(额外)。也就是说,在df2中找到具有部门“sales”的类别“ot”的对应费率,并按照上面所示计算金额。最后,所有y必须用df1中各自的金额替换。我试着使用join和许多其他方法,但似乎都不管用。

rbpvctlc

rbpvctlc1#

尝试:

cols = ["COM", "OT", "BIN"]

def fn(x):
    out = []

    for c in cols:
        if x[c] == "Y":
            rate, extra = df2.loc[
                df2.CATEGORY.eq(c) & df2.DEPT.eq(x.DEPT.upper()),
                ["RATE", "EXTRA"],
            ].values[0]
            out.append(x.HOURS * rate + extra)
        else:
            out.append(0)

    return pd.Series(dict(zip(cols, out)))

df1.loc[:, cols] = df1.apply(fn, axis=1)
print(df1)

印刷品:

EMP_NAME  HOURS   DEPT   COM    OT   BIN
0        A      3  Sales  0.00  2.06  3.06
1        B      5  Sales  0.00  0.00  3.10
2        C      4    FIN  0.24  0.00  0.00
3        D      2    FIN  0.00  6.08  8.14

相关问题