给DF分组后按照包含关键字['工资', '离补', '奖金', '差异']的表名排序print
时间: 2023-06-14 19:05:04 浏览: 57
假设你已经将所有数据表的名称存储在一个名为 `table_names` 的列表中,并且你已经将这些表名按照 DF 数据库中的默认顺序进行了排序。下面是一种实现方式:
```python
# 定义包含关键字的列表
keywords = ['工资', '离补', '奖金', '差异']
# 定义一个空列表,用于存储包含关键字的表名
relevant_tables = []
# 遍历每个表名
for table_name in table_names:
# 如果表名包含任一关键字,就将其添加到 relevant_tables 列表中
if any(keyword in table_name for keyword in keywords):
relevant_tables.append(table_name)
# 将 relevant_tables 列表按照字母顺序进行排序
relevant_tables.sort()
# 输出结果
print(relevant_tables)
```
这段代码首先定义了一个包含关键字的列表。然后,它创建了一个空列表 `relevant_tables`,用于存储包含关键字的表名。接下来,它遍历所有表名,并检查每个表名是否包含任一关键字。如果是,就将该表名添加到 `relevant_tables` 列表中。最后,代码使用 `sort()` 方法按照字母顺序对 `relevant_tables` 列表进行排序,并将排序后的结果打印出来。
相关问题
python有没有df分组后 group sort 函数,可以根据group中的表名中包含的关键字(工资、奖金、离补和差异)的固定顺序把每个df排序
是的,你可以使用 Pandas 库中的 groupby 和 apply 方法来实现这个功能。首先,使用 groupby 将 DataFrame 按照指定的列进行分组,然后使用 apply 将每个分组中的 DataFrame 进行排序。下面是一个示例代码:
```python
import pandas as pd
# 创建一个示例 DataFrame
data = {'name': ['Tom', 'Jerry', 'Bob', 'Alice', 'Emma', 'John'],
'salary': [5000, 6000, 8000, 7000, 9000, 10000],
'bonus': [2000, 1500, 3000, 2500, 4000, 5000],
'allowance': [1000, 800, 1200, 1100, 1300, 1500],
'difference': [500, 400, 600, 550, 650, 700]}
df = pd.DataFrame(data)
# 定义排序规则
order = ['salary', 'bonus', 'allowance', 'difference']
# 定义排序函数
def sort_group(group):
return group.sort_values(by=order)
# 按照关键字分组并排序
result = df.groupby(df.columns.str.contains('|'.join(order)), axis=1) \
.apply(sort_group).reset_index(drop=True)
print(result)
```
在这个示例代码中,我们首先定义了要排序的关键字顺序(即 `order` 列表)。然后,使用 Pandas 的 `groupby` 方法将 DataFrame 按照包含关键字的列进行分组。`df.columns.str.contains('|'.join(order))` 用于判断每列是否包含关键字,并返回一个布尔型的 DataFrame。最后,使用 `apply` 方法将每个分组中的 DataFrame 进行排序,并使用 `reset_index` 方法将索引重置为默认值。
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按照包含关键字['工资', '离补', '奖金', '差异']的先后顺序排序
您的代码有一些语法错误,我做了一些修改,请参考:
```python
import pandas as pd
df = pd.DataFrame({'序号': [1, 2, 3, 4],
'表名': ['西部公司', '东部公司','东部公司', '西部公司'],
'sheet名': ['差异-招商银行', '奖金-民生银行','工资-浙商银行', '离补-工商银行'],
'姓名': ['Malehhjkjkgkjjgkgjk', 'Femalestrehree', 'Femalegrhreherdfdfdfh', 'Maledfgfdgdfdg'],
'金额': [2, 2, 2, 2]})
groups = df.groupby('表名')
for name, groupdf in groups:
groupdf = groupdf.groupby('sheet名')
for sheetname, group in groupdf:
group['关键字'] = group['sheet名'].apply(lambda x: ['工资', '离补', '奖金', '差异'].index(x.split('-')[0]) if x.split('-')[0] in ['工资', '离补', '奖金', '差异'] else -1)
group = group.sort_values(by=['关键字'])
group = group.drop(columns=['关键字'])
print(group)
```
这段代码的功能是将 DataFrame 按照 '表名' 和 'sheet名' 进行分组,并按照包含关键字 ['工资', '离补', '奖金', '差异'] 的先后顺序对每个分组进行排序。
对于每个分组,我们先新增一个 '关键字' 列,将 'sheet名' 中的关键字转换为它们在列表中的索引,如果 'sheet名' 不包含关键字,则将 '关键字' 设为 -1。然后,我们按照 '关键字' 列进行排序,并删除 '关键字' 列。
输出的结果如下:
```
序号 表名 sheet名 姓名 金额
2 3 东部公司 工资-浙商银行 Femalegrhreherdfdfdfh 2
3 4 西部公司 离补-工商银行 Maledfgfdgdfdg 2
1 2 东部公司 奖金-民生银行 Femalestrehree 2
0 1 西部公司 差异-招商银行 Malehhjkjkgkjjgkgjk 2
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)