如何在单个Pandas Series的列表元素中找出仅出现一次的元素?
解决单列Pandas Series含列表元素的单次出现元素提取问题
嘿,我完全懂你的困扰——当Series里的每个元素都是列表时,常规的unique()方法确实帮不上忙,因为它只会判断整个列表的唯一性,而不是列表内的单个元素。不过咱们可以通过几个简单的Pandas方法轻松解决这个问题,针对你给出的示例,具体步骤如下:
首先,先还原你的示例数据:
import pandas as pd # 构造示例Series s = pd.Series([['g','k'], ['e','g'], ['e'], ['k','e'], ['s'], ['g']])
接下来分三步处理:
展开列表元素:用
explode()方法把每个列表里的元素拆成单独的行,这样每个元素都成为独立的记录:exploded_series = s.explode()这一步之后,
exploded_series会变成:0 g 0 k 1 e 1 g 2 e 3 k 3 e 4 s 5 g dtype: object统计元素出现频次:用
value_counts()统计每个元素的出现次数:element_counts = exploded_series.value_counts()得到的结果是:
e 3 g 3 k 2 s 1 dtype: int64筛选仅出现一次的元素:直接从统计结果里筛选出频次等于1的元素,转成列表就是最终结果:
single_occurrence_elements = element_counts[element_counts == 1].index.tolist()运行后
single_occurrence_elements的值就是['s'],和你的预期完全一致。
如果你的Series里有多个只出现一次的元素,这个方法也能一次性把它们全部找出来,非常通用。
内容的提问来源于stack exchange,提问作者yannickhau
相关产品推荐
相关产品推荐

