【发布时间】:2016-04-14 11:42:30
【问题描述】:
我正在尝试测试 series 中的值是否是唯一值。我知道series.unique 可以在series 中给出一组唯一值,但不确定它是否适合我的情况。或者遍历series,但是效率不是很高,所以我想知道有没有更好的方法来做到这一点?
【问题讨论】:
标签: python-3.x pandas unique
我正在尝试测试 series 中的值是否是唯一值。我知道series.unique 可以在series 中给出一组唯一值,但不确定它是否适合我的情况。或者遍历series,但是效率不是很高,所以我想知道有没有更好的方法来做到这一点?
【问题讨论】:
标签: python-3.x pandas unique
您可以将duplicated 与参数keep=False 一起使用,然后通过~ 反转布尔值Series:
print df
col
0 a
1 b
2 a
3 b
4 c
print df.col.duplicated(keep=False)
0 True
1 True
2 True
3 True
4 False
Name: col, dtype: bool
print ~df.col.duplicated(keep=False)
0 False
1 False
2 False
3 False
4 True
Name: col, dtype: bool
【讨论】:
您可以结合布尔索引和内置 len() 来获取给定值的确切实例数量。
假设您的 DataFrame 如下所示:
In [155]: test_1 = pd.DataFrame(np.array([1,2,3,3,4]), columns=['A'])
In [156]: test_1
Out[156]:
A
0 1
1 2
2 3
3 3
4 4
您可以像这样获取值3 或1 的实例数量:
In [158]: len(test_1[test_1.A == 3])
Out[158]: 2 ## two instances make for non-unique value
In [159]: len(test_1[test_1.A == 1])
Out[159]: 1 ## Unique value!!
通过这种方式,您可以定义要测试的确切值并获取该值的实例数量。
【讨论】: