如何在Pandas DataFrame中提取每行最长字符串并生成新列
提取每行最长字符串到新列的解决方案
假设你拆分后的DataFrame里,每行都是拆分后的名字片段(可能存在空值NaN),下面提供两种实用方法:
方法一:简单直观(适合中小数据集)
用apply逐行处理,结合max函数按长度取最长字符串,同时跳过空值:
# 新增longest_name列,每行取非空字符串中最长的那个 df['longest_name'] = df.apply(lambda row: max(row.dropna(), key=len), axis=1)
row.dropna()用来过滤掉每行的空值,避免max函数报错;key=len指定按字符串长度比较大小,直接取长度最大的字符串。
方法二:高效向量化(适合大数据集)
如果数据量很大,apply的逐行处理效率偏低,用向量化操作速度更快:
# 先把空值替换成空字符串,避免计算长度时出错 filled_df = df.fillna('') # 计算每个单元格字符串的长度 str_lengths = filled_df.applymap(len) # 找到每行长度最大的列的索引 max_col_pos = str_lengths.idxmax(axis=1) # 根据索引提取对应的最长字符串 df['longest_name'] = filled_df.values[df.index, max_col_pos]
- 全程用Pandas向量化操作,比逐行遍历效率高很多;
- 若一行内有多个长度相同的最长字符串,会取最先出现的那个。
内容的提问来源于stack exchange,提问作者Pravshh040
相关产品推荐
相关产品推荐

