【发布时间】:2020-11-21 07:08:01
【问题描述】:
我之前创建了一个用于创建作者索引的 python 脚本。
为了省去你的细节,(因为从 pdf 中提取文本非常困难)我创建了
一个最小的可重现示例。我目前的状态是我为每个作者换了一行,并且
作者出现的页面的逗号分隔列表。
但是我想以升序方式对页面列表进行排序。
import pandas as pd
import csv
words = ["Autor1","Max Mustermann","Max Mustermann","Autor1","Bertha Musterfrau","Author2"]
pages = [15,13,5,1,17,20]
str_pages = list(map(str, pages))
df = pd.DataFrame({"Autor":words,"Pages":str_pages})
df = df.drop_duplicates().sort_values(by="Autor").reset_index(drop=True)
df = df.groupby("Autor")['Pages'].apply(lambda x: ','.join(x)).reset_index()
df
这会产生所需的输出(页面排序除外)。
Autor Pages
0 Author2 20
1 Autor1 15,1
2 Bertha Musterfrau 17
3 Max Mustermann 13,5
我尝试将 Pages 列向量化为字符串,用逗号分隔并应用一个 lambda 函数,该函数应该对结果列表进行排序。
df["Pages"] = df["Pages"].str.split(",").apply(lambda x: sorted(x))
df
但这仅适用于Autor1,但不适用于Max Mustermann。
我似乎无法弄清楚为什么会这样
Autor Pages
0 Author2 [20]
1 Autor1 [1, 15]
2 Bertha Musterfrau [17]
3 Max Mustermann [13, 5]
【问题讨论】:
标签: python pandas string sorting