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

如何在Pandas DataFrame中提取列表列最大值并生成新列

提取Pandas列表列中的最大值创建新列

问题背景

现有如下Pandas DataFrame:

import pandas as pd
import numpy as np
d = {'Cell':['A','B','C','D','E'],'D1':[5, 2, 2, 6,6], 'D2':[np.nan, 5, 6, np.nan,3], 'D3':[7,np.nan, 5, 5,np.nan], 'D6':[17, 3, np.nan,np.nan,2],'diff%':[np.nan,[40],[16.67],[16.67,50],[50,33,24]]}
df = pd.DataFrame(d)

原始数据:

CellD1D2D3D6diff%
0A5NaN7.017.0NaN
1B25.0NaN3.0[40]
2C26.05.0NaN[16.67]
3D6NaN5.0NaN[16.67, 50]
4E63.0NaN2.0[50, 33, 24]

需求:新增列max_diff%,提取diff%列(元素为列表或NaN)中的最大值,最终得到目标结果。

解决方案

方法一:apply结合自定义逻辑

直接遍历diff%列元素,判断是否为列表,是则取最大值,否则返回NaN:

df['max_diff%'] = df['diff%'].apply(lambda x: max(x) if isinstance(x, list) else np.nan)

逻辑直观,精准处理列表与NaN混合的列场景。

方法二:explode + groupby拆分分组

先将列表拆分为多行,再按原索引分组取最大值:

df['max_diff%'] = df['diff%'].explode().groupby(level=0).max()

explode把列表元素拆成单独行,groupby(level=0)按原索引分组聚合,自动保留NaN值。

两种方法均可得到符合预期的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:45:30