如何对Pandas DataFrame列中的每个列表元素进行升序排序?
对Pandas DataFrame列中的列表元素进行升序排序的正确方法
咱们先聊聊你代码里的问题:
- 你的
sort_col函数里,col.sort只是引用了列表的sort方法,但没执行它(少了括号()); - 就算补上括号,
list.sort()是原地修改原列表,它不会返回任何值(默认返回None),所以你的apply操作其实是把list列全替换成了None,这就是为啥看起来列表没被排序的原因。
最简洁的正确实现
我们可以用Python内置的sorted()函数,它会返回一个新的排序后的列表,而非原地修改原列表,完美适配这个场景。而且直接对list列使用apply就行,比逐行axis=1的方式更高效。
完整代码示例:
import pandas as pd import numpy as np # 创建Numpy数组 array = np.array([[1, [2,1,3]], [2,[3,1,2]]]) # 创建索引名称列表 index_values = ['first', 'second'] # 创建列名称列表 column_values = ['id', 'list'] # 创建DataFrame df = pd.DataFrame(data = array, index = index_values, columns = column_values) # 对list列的每个列表进行升序排序 df['list'] = df['list'].apply(sorted) print(df)
执行后输出的结果就是你想要的:
id list first 1 [1, 2, 3] second 2 [1, 2, 3]
如果你想用自定义函数的写法
那得修改函数让它返回排序后的列表,比如:
def sort_col(lst): # 直接用sorted返回新列表即可 return sorted(lst) # 也可以用原地排序的方式(需要先复制原列表避免修改源数据): # lst_copy = lst.copy() # lst_copy.sort() # return lst_copy df['list'] = df['list'].apply(sort_col)
这样也能得到正确结果,不过直接用df['list'].apply(sorted)是最省心的写法~
内容的提问来源于stack exchange,提问作者blue-sky
相关产品推荐
相关产品推荐

