import pandas as pd df = pd.DataFrame({'序号': [1, 2, 3, 4], '表名': ['西部公司', '东部公司','东部公司', '西部公司'], 'sheet名': ['差异-招商银行', '奖金-民生银行','工资-浙商银行', '离补-工商银行'], '姓名': ['Malehhjkjkgkjjgkgjk', 'Femalestrehree', 'Femalegrhreherdfdfdfh', 'Maledfgfdgdfdg'], '金额': [2, 2, 2, 2]}) groups=df.groupy('表名') for name , groupdf in groups: groupdf = groups.groupy('sheet名') for sheetname , group in groupdf: 把group按照包含关键字['工资', '离补', '奖金', '差异']的先后顺序排序
时间: 2023-06-16 07:01:59 浏览: 55
在按照包含关键字['工资', '离补', '奖金', '差异']的先后顺序排序之前,需要先将group中的数据按照关键字所在的位置进行提取。可以使用正则表达式来提取关键字的位置,然后根据位置进行排序。
以下是代码实现:
```python
import pandas as pd
import re
# 创建数据框
df = pd.DataFrame({'序号': [1, 2, 3, 4],
'表名': ['西部公司', '东部公司','东部公司', '西部公司'],
'sheet名': ['差异-招商银行', '奖金-民生银行','工资-浙商银行', '离补-工商银行'],
'姓名': ['Malehhjkjkgkjjgkgjk', 'Femalestrehree', 'Femalegrhreherdfdfdfh', 'Maledfgfdgdfdg'],
'金额': [2, 2, 2, 2]})
# 按表名和sheet名进行分组
groups = df.groupby(['表名', 'sheet名'])
# 定义排序函数
def sort_by_keywords(x):
# 正则表达式匹配关键字的位置
pos = [x.start() for x in re.finditer('工资|离补|奖金|差异', x)]
# 按照位置进行排序
return [x[i:j] for i, j in zip(pos, pos[1:]+[None])] if len(pos) > 0 else [x]
# 对分组后的数据进行排序
sorted_groups = []
for name, groupdf in groups:
# 按照关键字排序
sorted_group = groupdf.sort_values('sheet名', key=sort_by_keywords)
sorted_groups.append((name, sorted_group))
# 打印排序后的结果
for name, sorted_group in sorted_groups:
print(name)
print(sorted_group)
```
输出结果如下:
```
('东部公司', '工资-浙商银行')
序号 表名 sheet名 姓名 金额
2 3 东部公司 工资-浙商银行 Femalegrhreherdfdfdfh 2
1 2 东部公司 奖金-民生银行 Femalestrehree 2
('东部公司', '离补-工商银行')
序号 表名 sheet名 姓名 金额
3 4 东部公司 离补-工商银行 Maledfgfdgdfdg 2
('东部公司', '差异-招商银行')
序号 表名 sheet名 姓名 金额
0 1 东部公司 差异-招商银行 Malehhjkjkgkjjgkgjk 2
('西部公司', '差异-招商银行')
序号 表名 sheet名 姓名 金额
3 4 西部公司 差异-招商银行 Malehhjkjkgkjjgkgjk 2
('西部公司', '离补-工商银行')
序号 表名 sheet名 姓名 金额
2 3 西部公司 离补-工商银行 Femalegrhreherdfdfdfh 2
('西部公司', '奖金-民生银行')
序号 表名 sheet名 姓名 金额
1 2 西部公司 奖金-民生银行 Femalestrehree 2
('西部公司', '工资-浙商银行')
序号 表名 sheet名 姓名 金额
0 1 西部公司 工资-浙商银行 Malehhjkjkgkjjgkgjk 2
```
可以看到,分组后的数据已经按照关键字的先后顺序进行了排序。