You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理Pandas数据框'Ages'列的字符串数组并提取最大值?

问题描述

我有一个名为new_df的Pandas数据框,其中Ages列的每个元素都是字符串组成的数组。生成该数据框的代码如下:

df = train_cases[train_cases['Family_name'].duplicated(keep = False)]
new_df = pd.DataFrame({'Ages' : df.groupby(df['Family_name'])['Age'].transform(lambda x: '| '.join(x.astype(str))),
                       'Names' : df.groupby(df['Family_name'])['Name'].transform(lambda x: '| '.join(x)),
                       'Family_name' : df['Family_name']
                        })

new_df['Ages'] = new_df['Ages'].apply(lambda x: x.split('| ')) 
new_df['Names'] = new_df['Names'].apply(lambda x: x.split('| '))

new_df.head(10)

train_cases是读取Kaggle泰坦尼克号竞赛CSV文件生成的数据框,代码如下:

def fam_name(name):
    return name.split(',')[0]

train_cases = pd.read_csv("/.../train.csv")
train_cases = train_cases.dropna(subset = ['PassengerId','Pclass','Sex','Age','SibSp','Parch','Fare'],how = "any")
train_cases['Family_name'] = train_cases['Name'].apply(lambda x: fam_name(x))

我希望将Ages列中每个列表的元素转换为数值类型(整数或浮点数),并提取每个列表的最大值。尝试了以下代码但未得到正确结果:

max_val = 0

for x in new_df['Ages']:
    for ind, y in enumerate(x):
        if float(y) > max_val:
            
            max_val = float(y)
            max_index = ind
            
            print(max_val, max_index)
解决方案

你的循环代码问题在于max_val是全局变量,会持续记录所有列表中的最大值,而非每个单独列表的最大值。以下是几种更高效的实现方式:

方法1:使用apply结合列表推导式

直接对Ages列的每个列表做类型转换后取最大值,代码简洁直观:

# 转换每个列表元素为浮点数并提取最大值
new_df['Max_Age'] = new_df['Ages'].apply(lambda lst: max(float(age) for age in lst))

方法2:使用explode+groupby(适合大规模数据)

如果数据量较大,apply的效率可能偏低,可通过展开列表再分组计算的方式优化:

# 展开Ages列的列表,保留原索引
expanded_df = new_df['Ages'].explode().astype(float).reset_index()
# 按原索引分组取最大值,合并回原数据框
new_df['Max_Age'] = expanded_df.groupby('index')[0].max()

方法3:优化循环代码

如果坚持使用循环,需在处理每个新列表时重置最大值变量:

max_ages = []
for age_list in new_df['Ages']:
    current_max = 0.0
    for age_str in age_list:
        age = float(age_str)
        if age > current_max:
            current_max = age
    max_ages.append(current_max)
new_df['Max_Age'] = max_ages

内容的提问来源于stack exchange,提问作者Zuni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 19:43:42