【发布时间】:2021-08-02 01:23:21
【问题描述】:
我想创建一个作者索引。
在我的数据框中,每个页面都有一个作者列和另一个带有长字符串的列
作者的名字出现在。因为我收到这些数字的文档总是双页,所以它总是类似于 3 - 4 或 17 - 18
我的尝试
我试图通过用, 拆分字符串来解决它,分解它,然后用- 再次拆分它,并修剪结果子列表的每个字符串。所以现在我得到了每个双页的列表,起始页和结束页有 2 个字符串 -> 例如['8','9'].
目标目标
从每个作者的这些列表中,我想按起始页(每个列表中的第一个条目)对它们进行排序,我无法弄清楚。在下面的最小可重现示例中,索引 2 应该是
['8', '9'] ['158', '159'], ['178', '179']
甚至更好地转换回一个长字符串
'8 - 9, 158 - 159, 178 - 179'
MRE
import pandas as pd
data = {'Author': ["AAA, Anton","CCC, Berthelm","DDD, Greta"],
'Page': ["16 - 17", "238 - 239", "178 - 179, 158 - 159, 8 - 9"]}
df = pd.DataFrame(data=data)
df["Pages"] = df["Page"].str.split(',').explode().str.split(' - ').apply(lambda x: [s.lstrip() for s in x])\
.sort_values().groupby(level=0).agg(lambda x: ', '.join(map(str, x)))
打印输出
Author ... Pages
0 AAA, Anton ... ['16', '17']
1 CCC, Berthelm ... ['238', '239']
2 DDD, Greta ... ['158', '159'], ['178', '179'], ['8', '9']
【问题讨论】:
标签: python pandas string sorting