如何对Pandas DataFrame的Scores列中的嵌套列表进行排序?
解决方法
你之前用的df.sort_values(by=["Scores"])是对整个Scores列的行进行排序,而非对每个列表内部的元素排序,这就是没得到预期结果的原因。要实现列表内部排序,我们可以用apply方法遍历Scores列的每个元素,对列表类型的元素单独处理:
完整代码
import pandas as pd import numpy as np df = pd.DataFrame({'Name':['John', 'Rachel', 'Adam','Joe'], 'Age':[95, 102, 31,np.nan], 'Scores':[np.nan, [80, 82, 78], [25, 20, 30, 60, 21],np.nan] }) # 对Scores列的列表内部排序,非列表元素(NaN)保持不变 df['Scores'] = df['Scores'].apply(lambda x: sorted(x) if isinstance(x, list) else x) print(df)
输出结果
Name Age Scores 0 John 95.0 NaN 1 Rachel 102.0 [78, 80, 82] 2 Adam 31.0 [20, 21, 25, 30, 60] 3 Joe NaN NaN
这段代码的逻辑很直接:
- 用
apply遍历Scores的每一行元素 - 通过
isinstance(x, list)判断当前元素是否为列表 - 如果是列表,用
sorted()对其内部元素做升序排序;如果是NaN,直接返回原值
内容的提问来源于stack exchange,提问作者josepmaria
相关产品推荐
相关产品推荐

