import pandas as pd df = pd.DataFrame({'序号': [1, 2, 3, 4], '表名': ['西部公司', '东部公司','东部公司', '西部公司'], 'sheet名': ['差异-招商银行', '奖金-民生银行','工资-浙商银行', '离补-工商银行'], '姓名': ['Malehhjkjkgkjjgkgjk', 'Femalestrehree', 'Femalegrhreherdfdfdfh', 'Maledfgfdgdfdg'], '金额': [2, 2, 2, 2]}) 把df按照sheet名列包含关键字['工资','离补','奖金','差异']先后顺序排序
时间: 2023-06-16 14:02:10 浏览: 155
可以使用pandas的sort_values方法,按照sheet名列中包含关键字的先后顺序进行排序。代码如下:
```
keywords = ['工资', '离补', '奖金', '差异']
df['sort_key'] = df['sheet名'].apply(lambda x: next((i for i, k in enumerate(keywords) if k in x), len(keywords)))
df = df.sort_values('sort_key')
df = df.drop(columns=['sort_key'])
```
首先,我们创建了一个包含关键字的列表keywords。然后,我们为df添加了一个新列sort_key,其中包含sheet名列中包含关键字的先后顺序。具体来说,我们使用了pandas的apply方法,对于每一行的sheet名列,我们使用了一个lambda函数来查找第一个包含关键字的位置,如果没有找到,则返回列表的长度。这样,我们就可以对sort_key列进行排序,以获得按照关键字排序的结果。最后,我们删除了sort_key列,以返回原始的df。
相关问题
import pandas as pd df = pd.DataFrame({'序号': [1, 2, 3, 4], '表名': ['西部公司', '东部公司','东部公司', '西部公司'], 'sheet名': ['招商', '民生','浙商', '工商'], '姓名': ['Malehhjkjkgkjjgkgjk', 'Femalestrehree', 'Femalegrhreherdf
', 'Malewerwer'], '年龄': [28, 34, 29, 42]})
这是一个用 Pandas 库创建的 DataFrame,其中包含了一些基本的数据,包括序号、表名、sheet名、姓名和年龄。如果你想了解更多关于 Pandas 的使用,我可以为你提供一些学习资源。
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按照包含关键字['工资', '离补', '奖金', '差异']的先后顺序排序
您可以使用 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 进行排序。
阅读全文