妹子发给我一张公司要处理的绩效表格,我以为很简单,然而菜是原罪

2019-12-25 18:00:33 +08:00
 smartG

妹子发给我一个她们公司 100 多人的 Excel 表格,是关于员工等级评定的,有 N1,N2,N3,N4(百分制得分 /按权重 10%,20%,50%,20%计算)四项得分和总分 sum

标准如下:

尝试的方法:

代码部分( python 小白,大佬轻喷)

import pandas as pd  
data1=pd.read_excel("C:/Users/acer/Desktop/绩效.xlsx")  
def final (num1):  
    if (num1==10):  
        return "A"  
    elif(num1==9):  
        return "B"  
    elif(num1==8):  
        return "C"  
    elif(num1==7):  
        return "D"  
    elif (num1==6):  
        return "E"

def c_f1():  
    for i in range(5):  
        def c_f(first_number):  
            num=0  
            if(data1.iloc[i].values[1]<6):  
                num+=1  
            elif(data1.iloc[i].values[2]<12):  
                num+=1  
            elif(data1.iloc[i].values[3]<30):  
                num+=1  
            elif(data1.iloc[i].values[4]<12):  
                num+=1  
            return first_number-num  

        if (data1.iloc[i].values[5]>=90):
                n1=c_f(10)
                return final(n1)
        elif(data1.iloc[i].values[5]>=80 and data1.iloc[1].values[5]<90):
                n1=c_f(9)
                return final(n1)
        elif(data1.iloc[i].values[5]>=70 and data1.iloc[1].values[5]<80):
                n1=c_f(8)
                return final(n1)
        elif(data1.iloc[i].values[5]>=60 and data1.iloc[1].values[5]<70):
                n1=c_f(7)
                return final(n1)
        elif(data1.iloc[i].values[5]>=50 and data1.iloc[1].values[5]<60):
                n1=c_f(6)
                return final(n1)
print(c_f1())
4222 次点击
所在节点    问与答
43 条回复
pzhzp
2019-12-25 18:23:55 +08:00
excel 貌似 sum()-countif()*2 算一个最终总分再分级就可以实现?
pzhzp
2019-12-25 18:24:23 +08:00
@pzhzp 错了*10
singerll
2019-12-25 18:28:10 +08:00
sum-n1/60 取整-n2/60 取整-。。。。
turan12
2019-12-25 18:28:53 +08:00
设置一个过渡字段
wmhx
2019-12-25 18:37:20 +08:00
用 sql 来统计 不容易么?
happydezhangning
2019-12-25 18:50:26 +08:00
工具人?
whwq2012
2019-12-25 19:02:34 +08:00
楼主应该把脱敏后的表格发出来方便大神操作,推荐腾讯表格分享
zhy0216
2019-12-25 19:13:32 +08:00
你把 c_f 函数的 i 打印出来看看
kokutou
2019-12-25 19:23:53 +08:00
中间过渡下。。。
先算 sum 等级,再算低于 60 等级。
查的时候也好查呀。
sunmker
2019-12-25 19:25:28 +08:00
我有一个想法:

首先,定义分数对应等级,A:10,B:9,C:8,D:7

其次,通过 excel 的筛选功能分别筛选出“按照 sum 划分”的 ABCD,专门使用一列(比如 G )填上 ABCD 所对应的分数 10、9、8、7 (这个筛选出来后直接可以利用 excel 批量操作,下同)

然后,在开辟四列(比如 H、I、J、K )分别用函数 =IF(A1<6,1,0) 这个判断公式来标记是否不及格,不及格记录 1,及格 0

接着,就是阅读理解了,「如果在上述四项中有一项低于 60 分,等级顺降一级,两项低于 60 分,降两级」,这个是最多降两级( A ),还是最多 4 级( B )

如果是情况B,直接L列=G-H-I-J-K,然后你接着用筛选功能。一次筛选L列值为10的,在M列填上A,然后依次批量填完所有的……
如果是情况A,那你可以用L求和HIJK列,筛选,<2 的在M列=G-L,>= 2 的M列=G-2。然后筛选M列为10填写A……9填写B
zmxnv123
2019-12-25 19:30:37 +08:00
想知道妹子去哪领
zeroDev
2019-12-25 19:32:43 +08:00
可以试试 openpyxl 库处理
wangkun025
2019-12-25 19:33:48 +08:00
继续用 excel,不要考虑 Python
JCZ2MkKb5S8ZX9pq
2019-12-25 19:35:10 +08:00
直接 excel 插几个过程列好了,搞完还给她个简化版。
xlcoder166
2019-12-25 19:38:03 +08:00
是关于员工等级评定的,有 N1,N2,N3,N4(百分制得分 /按权重 10%,20%,50%,20%计算)四项得分和总分 sum

(N1 * 0.1) + (N2 * 0.2) + (N3 * 0.5) + (N4 * 0.2)

如果 sum 在 90 分以上,为等级 A,80-90:等级 B,70-80:等级 C,60-70:等级 D

a + b + c + d = result (A B C D)

如果在上述四项中有一项低于 60 分,等级顺降一级,两项低于 60 分,降两级

? 这个标准有歧义啊

1. 上诉四项低于 60 分, 这个 60 分指定那个 N1 还是 N1 * 0.1 ,
2. 是最多降 2 级吗?


思路

先算总值的条件 1, 再判断条件 2 的情况
dunn
2019-12-25 19:40:16 +08:00
excel 多加几个辅助列
passluo
2019-12-25 19:48:12 +08:00
卧槽这个也太简单了吧……

- sum 计算为一列 > C1
- C1 按区间匹配出 ABCD 等,分别对应成 4321 > C2
- countifs 统计一下每行低于 60 分单元格的数量 > C3
- C2-C3 得出最后的分段 > C4
- 把 C4 结果 1234 再对应回 DBCA > C5
- 把 C1-C4 隐藏……

电子表格这种系统的设计就是鼓励大家去计算一些中间统计结果,再计算出最终结果,为啥一定要一个函数解决所有问题啊。
xlcoder166
2019-12-25 19:57:12 +08:00
题外话 我很好奇 在这种条件下能拿 A 的都是啥神仙啊 =.=
smartG
2019-12-25 19:59:01 +08:00
@passluo 多谢!看了大家的评论才发现我把问题复杂化了,我对 Excel 的函数功能了解不多,只知道 Python 可以处理批量数据,低估了 Excel 本身的强大功能
smartG
2019-12-25 20:03:29 +08:00
@xlcoder166 是每项单独的,百分制,不是最多降两级,有几项不及格就降几级,我看了一下,很少有超过两项不及格的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/632268

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX