如何在不使用循环的情况下用Pandas提取列表指定索引元素?
解决方法
嘿,这事儿好办!你要的单行Pandas解决方案其实非常简洁,刚好匹配你给出的数据特征——每个列表里只有一个元素不是1,而且这个元素是列表里的最大值。
方法一:利用max快速提取(针对你的数据最简洁)
直接对每个列表应用max函数就行,因为非1的元素都是最大的那个:
import pandas as pd df = pd.DataFrame({'A' : [[6,1,1,1], [1,5,1,1], [1,1,11,1], [1,1,1,20]]}) # 生成B列的单行代码 df['B'] = df['A'].apply(lambda x: max(x))
运行后得到的结果完全符合你的期望:
A B 0 [6, 1, 1, 1] 6 1 [1, 5, 1, 1] 5 2 [1, 1, 11, 1] 11 3 [1, 1, 1, 20] 20
方法二:通用过滤法(适配更复杂的场景)
如果以后你的数据里出现其他非1的元素(比如小于1的数),用max就可能出错,这时候可以直接过滤掉所有1,取剩下的唯一元素:
df['B'] = df['A'].apply(lambda x: [num for num in x if num != 1][0])
这个方法更通用,不管非1元素是大是小,只要每个列表里只有一个非1元素,就能准确提取。
内容的提问来源于stack exchange,提问作者David Erickson
相关产品推荐
相关产品推荐

