因业务需要,现在要将一个A表转置成B表(行转列)
A表样式大致如下:
B表样式大致如下:
因为要转换的表大概有50个-100个左右,因为想写循环来完成指定的目标,个人大致思路如下:
1、先将A表的姓名列进行分组,分组后对日期列进行排序
2、用pandas对A表的日期列进行索引设置,将其放置为第一列处
3、然后将表进行转置换
由于才接触pandas不久,实际用法还没摸清,因此上述思路想到一半就断了,不知道接下来该怎样写下去才好,希望各位技术朋友不吝赐教,指导一下这个表的转换该怎样去完成最好,感谢
抛砖引玉吧
from operator import itemgetter
li = [
{"姓名":"小明","日期":"2021-03","基本工资":"5100","绩效":"2000","提成":"1000",},
{"姓名":"小明","日期":"2021-02","基本工资":"5300","绩效":"2000","提成":"2000",},
{"姓名":"小明","日期":"2021-01","基本工资":"5000","绩效":"1000","提成":"3000",},
{"姓名":"小强","日期":"2021-04","基本工资":"2100","绩效":"1000","提成":"400",},
{"姓名":"小强","日期":"2021-03","基本工资":"2100","绩效":"1000","提成":"500",},
]
'''
我们需要的结果
res = [
{"薪资类型":"","姓名":,"":,"日期1":"","日期2":"","日期n":"",}
]
'''
#工资类型
res=[]
ts = ("基本工资","绩效","提成")
#员工姓名结合去重
names = set([i["姓名"] for i in li])
dates = set([i["日期"] for i in li])
for t in ts:
temp ={}
for name in names:
temp["薪资类型"] = t
temp["姓名"] = name
temp.update({}.fromkeys(sorted(list(dates))))
for dt in li:
if dt["姓名"] == name:
temp[dt["日期"]] = dt[t]
res.append(temp)
res.sort(key=itemgetter('姓名'))
print(res)
(我处理表格一般用matlab,对pandas不咋熟悉)可以试试新建矩阵在原表格中按需求提取数据,比如按日期把搜索到的信息直接按你的格式直接写入矩阵,调好格式再写入表格,不直接操作原表格