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-13 10:09:00 浏览: 77
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
5星 · 资源好评率100%
您可以使用 Pandas 中的 apply 函数来实现按照包含关键字的先后顺序排序。具体操作如下:
1. 创建一个包含关键字的列表,按照先后顺序排序:
```
order = ['工资', '离补', '奖金', '差异']
```
2. 创建一个函数,用于对每个 group 中的 sheet_name 进行排序:
```
def sort_sheet_name(group):
# 遍历关键字列表
for keyword in order:
# 如果 sheet_name 包含关键字,则返回关键字在列表中的索引值
if keyword in group['sheet名']:
return order.index(keyword)
# 如果 sheet_name 不包含任何关键字,则返回列表长度,表示排在最后
return len(order)
```
3. 对每个 groupdf 中的 group 进行排序:
```
groups = df.groupby('表名')
for name, groupdf in groups:
groupdf = groupdf.groupby('sheet名')
for sheetname, group in groupdf:
group = group.iloc[group['sheet名'].apply(lambda x: sort_sheet_name(x)).argsort()]
print(group)
```
其中,`group['sheet名'].apply(lambda x: sort_sheet_name(x))` 会返回一个 Series,包含每个 sheet_name 在关键字列表中的索引值,然后用 `argsort()` 函数进行排序,得到的索引值,即为排序后的顺序,最后通过 `iloc` 函数对 group 进行排序。
阅读全文