如何从DataFrame列的列表中提取最长元素(含并列情况)
提取DataFrame列表列中的最长单词
问题描述
现有如下DataFrame:
import pandas as pd df = pd.DataFrame({ 'Names':[['John','Stefan'], ['Stacy','Jennifer'], ['Paul','Sean', 'Alu']], })
需要新增一列Output,提取Names列每个列表中的最长单词;若存在多个长度相同的最长单词,返回所有符合条件的单词,预期输出如下:
| Names | Output |
|---|---|
| [John, Stefan] | Stefan |
| [Stacy, Jennifer] | Jennifer |
| [Paul, Sean, Alu] | Paul, Sean |
已知单个列表的处理方式如下,但不清楚如何遍历DataFrame列及处理并列最长的情况:
sorted_list = sorted(my_list, key=len) largest_element = sorted_list[-1]
解决方案
可以通过pandas的apply方法遍历列中的每个列表,配合自定义函数实现需求:
1. 定义处理单个列表的函数
该函数会找到列表中所有长度最长的单词,并将其用逗号连接为字符串:
def get_longest_words(lst): # 处理空列表的边界情况(可选) if not lst: return "" # 获取列表中单词的最大长度 max_length = max(len(word) for word in lst) # 筛选出所有长度等于最大长度的单词 longest_words = [word for word in lst if len(word) == max_length] # 用逗号连接成字符串返回 return ", ".join(longest_words)
2. 应用函数生成新列
使用apply方法将函数作用于Names列,生成Output列:
df['Output'] = df['Names'].apply(get_longest_words)
结果验证
执行上述代码后,df的内容如下:
Names Output 0 [John, Stefan] Stefan 1 [Stacy, Jennifer] Jennifer 2 [Paul, Sean, Alu] Paul, Sean
完全符合预期需求。
说明
apply方法会自动遍历Names列的每个列表元素,将其传入自定义函数处理- 直接计算最大长度并筛选的方式,比排序后取最后一个更高效,同时能自然处理多个并列最长单词的情况
- 用
,连接结果,保证输出格式与预期一致
内容的提问来源于stack exchange,提问作者Sergei
相关产品推荐
相关产品推荐

