计算列表中的唯一元素

时间:2021-03-17 03:24:25

标签: python pandas

我有一个包含一列列表的数据框。

names                                       unique_values
[B-PER,I-PER,I-PER,B-PER]                        2
[I-PER,N-PER,B-PER,I-PER,A-PER]                  4
[B-PER,A-PER,I-PER]                              3
[B-PER, A-PER,A-PER,A-PER]                       2

我必须计算一列列表中的每个不同值,如果值出现不止一次,则将其视为一个。我怎样才能实现它

谢谢

3 个答案:

答案 0 :(得分:2)

explodenunique 结合

df["unique_values"] = df.names.explode().groupby(level = 0).nunique()

答案 1 :(得分:1)

您可以使用 inbulit set 数据类型来执行此操作 -

df['unique_values'] = df['names'].apply(lambda a : len(set(a)))

这是因为集合在其构造中不允许任何重复元素,因此当您将列表转换为集合时,它会去除所有重复元素,您需要做的就是获取结果集的长度。

要忽略列表中的 NaN 值,您可以执行以下操作 -

df['unique_values'] = df['names'].apply(lambda a : len([x for x in set(a) if str(x) != 'nan'])) 

答案 2 :(得分:0)

试试:

df["unique_values"] = df.names.explode().groupby(level = 0).unique().str.len()

输出

df
                                 names  unique_values
0         [B-PER, I-PER, I-PER, B-PER]              2
1  [I-PER, N-PER, B-PER, I-PER, A-PER]              4
2                [B-PER, A-PER, I-PER]              3
3         [B-PER, A-PER, A-PER, A-PER]              2
相关问题