找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2568|回复: 7

[求助] Pandas 分组问题

3

主题

8

帖子

8

积分

贫民

积分
8
Uncle0 发表于 2020-8-25 20:12:23 | 显示全部楼层 |阅读模式

如下表所示,通过Pandas生成了<class 'pandas.core.frame.DataFrame'>,如何变成大概表2的结构,请高手指点。在线等
Index
日期
姓名
班次
工时
迟到
早退
异常
0
2020/7/1
A
10.5
0
0
0
1
2020/7/1
B
10.5
0
0
0
2
2020/7/2
A
11.18
0
1
0
3
2020/7/2
B
10.5
0
0
0
4
2020/7/3
A
10.5
0
0
0
5
2020/7/3
B
10.5
0
0
0
7
2020/7/4
B
10.5
0
0
0
8
2020/7/5
A
8.15
0
1
0
10
2020/7/6
A
10.5
0
0
0
11
2020/7/6
B
10.5
0
0
0
12
2020/7/7
A
10.5
0
0
0
13
2020/7/7
B
10.5
0
0
0
14
2020/7/8
A
10.5
0
0
0
15
2020/7/8
B
10.5
0
0
0
16
2020/7/9
A
10.5
0
0
0
17
2020/7/9
B
10.5
0
0
0

下面是表2
 
2020/7/1
2020/7/2
2020/7/3
2020/7/4
2020/7/5
2020/7/6
2020/7/7
2020/7/8
2020/7/9
姓名
班次
工时
迟到
早退
异常
班次
工时
迟到
早退
异常
班次
工时
迟到
早退
异常
班次
工时
迟到
早退
异常
班次
工时
迟到
早退
异常
班次
工时
迟到
早退
异常
班次
工时
迟到
早退
异常
班次
工时
迟到
早退
异常
班次
工时
迟到
早退
异常
工时汇总
A
10.5
0
0
0
11.18
0
1
0
10.5
0
0
0
8.15
0
1
0
10.5
0
0
0
10.5
0
0
0
10.5
0
0
0
10.5
0
0
0
82.33
B
10.5
0
0
0
10.5
0
0
0
10.5
0
0
0
10.5
0
0
0
10.5
0
0
0
10.5
0
0
0
10.5
0
0
0
10.5
0
0
0
84

回复

使用道具 举报

0

主题

6

帖子

6

积分

贫民

积分
6
wodewan 发表于 2020-9-11 21:38:53 | 显示全部楼层
  1. import pandas as pd
  2. df=pd.read_excel('aaa.xlsx',usecols="b:g")
  3. res=pd.pivot(df,values=['班次','工时','迟到','早退'],index=['姓名'],columns=['日期'])
  4. res.swaplevel(1,0,axis=1).sort_index(axis=1,level=0,sort_remaining=False)
复制代码


1.jpg
回复 支持 2 反对 0

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2020-8-26 12:09:27 | 显示全部楼层
好歹上传个文件啊,还有数据里没夜班。
回复 支持 反对

使用道具 举报

3

主题

8

帖子

8

积分

贫民

积分
8
Uncle0  楼主| 发表于 2020-8-26 13:33:18 | 显示全部楼层
sheeboard 发表于 2020-8-26 12:09
好歹上传个文件啊,还有数据里没夜班。

数据,就是我贴出来的Table啊,直接复制到excel,读取就行,高手帮忙处理下哈,谢谢
回复 支持 反对

使用道具 举报

3

主题

8

帖子

8

积分

贫民

积分
8
Uncle0  楼主| 发表于 2020-8-26 13:52:14 | 显示全部楼层
抱歉,重新提供一份数据

aaa.xlsx

11.21 KB, 下载次数: 2

回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2020-8-29 09:03:59 | 显示全部楼层
本帖最后由 sheeboard 于 2020-8-29 12:33 编辑

凑合看吧,index_name,keys你自己再优化一下,我的做法是硬写的,应该用group的某个属性.
group=df.groupby('日期')
a=df['日期'].unique()
result=pd.concat([j.set_index('姓名').drop('日期',axis=1) for i,j in group],axis=1,keys=a)
Screenshot from 2020-08-29 09-02-02.png
回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2020-9-11 21:54:09 | 显示全部楼层

很好啊,一定是花了不少时间吧,我一开始也是想用pivot+swaplevel的,就是没想到索引排序,你厉害的。
回复 支持 反对

使用道具 举报

3

主题

8

帖子

8

积分

贫民

积分
8
Uncle0  楼主| 发表于 2020-9-25 10:33:40 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表